在 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));

但是我没有捕捉到这个异常

问题出在哪里?