在 xunit 测试中捕获异常
Catch exception in xunit test
我能捕捉到日志中出现而测试中没有的异常吗?
我执行了测试,它返回了状态:好的,但在日志中我有:
将创建包发布到 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
方法中的某处并且仍然 returning 状态 200。这是一个吞下错误和 return "OK"(希望你至少记录了它或其他东西)。
另一种方法是 return 500 状态而不是 200,以指示发生了内部服务器错误 - 然后尝试解决 NullReferenceException
。
您也可以选择 not 来吞下您 PostAsync
方法中的错误,让它一直冒泡。在这种情况下,您可以使用:
var exception = await Assert.ThrowsAsync<NullReferenceException>(() => fixture.PostAsync(testRequest));
(其中 testRequest
是您知道会触发该错误的内容)
如果得到 NullReferenceException
是预期的行为并且请求仍然是 "OK" 状态,那么在测试中以某种方式捕获它是没有意义的。
我想检查异常 "NullReferenceException" 没有发生。
我采纳了你的建议:
var exception = await Assert.ThrowsAsync<NullReferenceException>(() => fixture.PostAsync(testRequest));
但是我没有捕捉到这个异常
问题出在哪里?
我能捕捉到日志中出现而测试中没有的异常吗?
我执行了测试,它返回了状态:好的,但在日志中我有: 将创建包发布到 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
方法中的某处并且仍然 returning 状态 200。这是一个吞下错误和 return "OK"(希望你至少记录了它或其他东西)。
另一种方法是 return 500 状态而不是 200,以指示发生了内部服务器错误 - 然后尝试解决 NullReferenceException
。
您也可以选择 not 来吞下您 PostAsync
方法中的错误,让它一直冒泡。在这种情况下,您可以使用:
var exception = await Assert.ThrowsAsync<NullReferenceException>(() => fixture.PostAsync(testRequest));
(其中 testRequest
是您知道会触发该错误的内容)
如果得到 NullReferenceException
是预期的行为并且请求仍然是 "OK" 状态,那么在测试中以某种方式捕获它是没有意义的。
我想检查异常 "NullReferenceException" 没有发生。 我采纳了你的建议:
var exception = await Assert.ThrowsAsync<NullReferenceException>(() => fixture.PostAsync(testRequest));
但是我没有捕捉到这个异常