Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在xunit测试中捕获异常_C#_Integration Testing_Xunit.net_Fact - Fatal编程技术网

C# 在xunit测试中捕获异常

C# 在xunit测试中捕获异常,c#,integration-testing,xunit.net,fact,C#,Integration Testing,Xunit.net,Fact,我可以捕获日志中出现但测试中未出现的异常吗 我执行了测试,它返回状态:OK,但在日志中我有: 将创建包发布到Kafka时出现意外错误。id=5ec3eb81aa662c8a7c76e5e8。异常:System.NullReferenceException:对象引用未设置为对象的实例 如何在测试中捕获此异常?我试着使用Try-and-catch(异常),但什么也没用 [Fact] [DisplayTestMethodName] public async Task Exceptio

我可以捕获日志中出现但测试中未出现的异常吗

我执行了测试,它返回状态:OK,但在日志中我有: 将创建包发布到Kafka时出现意外错误。id=5ec3eb81aa662c8a7c76e5e8。异常:System.NullReferenceException:对象引用未设置为对象的实例

如何在测试中捕获此异常?我试着使用Try-and-catch(异常),但什么也没用

 [Fact]
    [DisplayTestMethodName]
    public async Task ExceptionTest()
    {
        try
        {
            var testRequest= @"{""Test1"":"1234"};
            var testRequestResp =
                await fixture.PostAsync(testRequest);
            Assert.Equal("HttpStatusCode: " + System.Net.HttpStatusCode.OK, "HttpStatusCode: " + testRequestResp.StatusCode);
        }
        catch (Exception ex)
        {
            Assert.True(ex == null, "Exception: " + ex.Message);
        }
日志
这意味着您正在处理
NullReferenceException
方法中已经存在的
PostAsync
异常,并且仍然返回状态200。这是一个接受错误并返回“OK”的设计决策(希望您至少记录了它或其他东西)

另一种方法是返回500状态而不是200状态,以指示发生了内部服务器错误,然后尝试解决
NullReferenceException

您也可以选择不接受
PostAsync
方法中的错误,让它一路冒泡。在这种情况下,您可以使用:

var exception=wait Assert.ThrowsAsync(()=>fixture.PostAsync(testRequest));
(其中
testRequest
是您知道会触发该错误的东西)


如果获取
NullReferenceException
是预期行为,并且请求仍处于“OK”状态,那么在测试中捕获它将毫无意义。

我想检查是否没有发生异常“NullReferenceException”。 我采纳了你的建议:

var exception = await Assert.ThrowsAsync<NullReferenceException>(() => fixture.PostAsync(testRequest));
var exception=wait Assert.ThrowsAsync(()=>fixture.PostAsync(testRequest));
但我不明白这个例外


问题出在哪里?

是的。正如我在回答中所说,这是因为异常正在
PostAsync
方法的某个地方被吞没(可能是在
try
/
catch
块中,该块不会重新显示异常)。这应该是对另一个答案的评论(您可以在问题末尾编辑后续内容)