我可以捕获出现在日志中但没有出现在测试中的异常吗?
我执行了测试,它返回了状态:OK,但是在日志中,我有:意外的错误将创建包发布到Kafka。 id = 5ec3eb81aa662c8a7c76e5e8。异常:System.NullReferenceException:对象引用未设置为对象的实例。
我如何在测试中捕获此异常?我尝试使用Try and catch(Exception),但没有成功。
[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);
}
日志VS log
[这意味着您已经在NullReferenceException
方法中的某个位置处理了PostAsync
,并且仍返回状态200。这是一项设计决定,要吞下该错误并返回“ OK”(希望您正在记录该错误或至少进行了某种记录) 。
一种不同的方法是返回500状态而不是200状态,以指示发生了内部服务器错误-然后尝试解决NullReferenceException
。
您也可以选择not来吞没PostAsync
方法中的错误,并使其一直冒泡。在这种情况下,您可以使用:
var exception = await Assert.ThrowsAsync<NullReferenceException>(testRequest);
((如果您知道testRequest
会触发该错误)
如果获得NullReferenceException
是预期的行为,并且请求仍处于“ OK”状态,那么以某种方式在测试中捕获它就没有任何意义。