C# 在xunit测试中捕获异常
我可以捕获日志中出现但测试中未出现的异常吗 我执行了测试,它返回状态:OK,但在日志中我有: 将创建包发布到Kafka时出现意外错误。id=5ec3eb81aa662c8a7c76e5e8。异常:System.NullReferenceException:对象引用未设置为对象的实例 如何在测试中捕获此异常?我试着使用Try-and-catch(异常),但什么也没用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
[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
块中,该块不会重新显示异常)。这应该是对另一个答案的评论(您可以在问题末尾编辑后续内容)