xunit测试中捕获异常

问题描述 投票:1回答:1

我可以捕获出现在日志中但没有出现在测试中的异常吗?

我执行了测试,它返回了状态: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

c# integration-testing xunit.net fact
1个回答
0
投票

[这意味着您已经在NullReferenceException方法中的某个位置处理了PostAsync,并且仍返回状态200。这是一项设计决定,要吞下该错误并返回“ OK”(希望您正在记录该错误或至少进行了某种记录) 。

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

您也可以选择not来吞没PostAsync方法中的错误,并使其一直冒泡。在这种情况下,您可以使用:

var exception = await Assert.ThrowsAsync<NullReferenceException>(testRequest);

((如果您知道testRequest会触发该错误)

如果获得NullReferenceException是预期的行为,并且请求仍处于“ OK”状态,那么以某种方式在测试中捕获它就没有任何意义。

© www.soinside.com 2019 - 2024. All rights reserved.