XUnit:如何断言ASP.NET Core中的控制器抛出的异常

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

我在控制器内部有一个方法,当检查不正确时会进行一些检查,它将引发错误。如何通过特定消息捕获API引发的错误?

我对如何进行此类断言感到困惑。

这是我到目前为止的代码,但是我没有设法捕获控制器抛出的错误。我做错了吗?

[Fact]
    public async Task AppendEmailBase64Dto_InvalidBase64_ReturnBadRequest()
    {
        // Arrange
        var emailControllerMocks = new EmailControllerMocks();
        var mockLogger = emailControllerMocks.MockLogger();
        var mockMapper = emailControllerMocks.MockMapper();
        var mockEmsWorkUnit = emailControllerMocks.MockEmsWorkUnit();
        var mockAzureBlob = emailControllerMocks.MockAzureBlobAndGetTemplate();

        // Setup
        var userRequestTemplateString = File.ReadAllText(@".\EmailController\UserRequestTemplate.txt");
        mockAzureBlob.Setup(blob => blob.GetHtmlBlob(It.IsAny<string>(), It.IsAny<Uri>()))
            .ReturnsAsync(userRequestTemplateString);


        // Act
        var emailController = new Controllers.ApiV10.EmailController(mockLogger.Object, mockMapper.Object, mockEmsWorkUnit.Object, mockAzureBlob.Object);
        var jsonString = File.ReadAllText(@".\EmailController\TemplateBase64Invalid.json");
        var testEmailBase64Dto = GeneralHelpers.Deserialize<EmailBase64Dto>(jsonString);

        var badRequestResult = await emailController.AppendEmailBase64Dto(testEmailBase64Dto);
        //var result = badRequestResult.Value as ObjectResult;
        //var errorMessage = badRequestResult.Value as List<string>;
        //var statusCode = badRequestResult.StatusCode;

        // Assert
        //Assert.Equal("The provided base64 template is not a valid base64 string", errorMessage[0]);
        //Assert.Equal(400, statusCode);
    }
unit-testing testing assert xunit assertion
1个回答
0
投票

使用Assert.ThrowsAsyncAssert.Throws的异步对应物来断言抛出了特定类型的异常。

根据您的情况,您会想要类似的东西:

var ex = Assert.Throws<HttpException>(() => await emailController.AppendEmailBase64Dto(testEmailBase64Dto);
© www.soinside.com 2019 - 2024. All rights reserved.