首页 > 解决方案 > 在try/catch中捕获异常后如何测试Api是否返回特定消息

问题描述

我正在 xunit 中编写测试方法。因此,当用户注册失败时,会在 catch 块中返回特定消息。在测试方法中,我想检查是否返回了正确的消息。但是当我跑步时,我收到了这条消息:

EnrollUser failed with HTTP response code:BadRequest.

如果有人可以帮助我找出可能的话,如何检索我想要的消息。下面是代码。

public async Task<IHttpActionResult> EnrollUser([FromUri]int id, int userId, int? 
    organizationId = null)
{               
    try
    {                   
        if (organizationId.HasValue)
        {
            Do something.....
        }
        else
        {
            Do something.....
        }

        return Ok();
    }
    catch (Exception e)
    {
        var errorMsg = $"User enrollment failed for userId:{userId}, serviceId:{id}.";                  
        return (IHttpActionResult)BadRequest(errorMsg);
    }
}

[Fact]
public async Task EnrollUser_Should_Return_Failure_Message()
{   
    const int userId = 2310;
    const int serviceId = 9;

    const string expectedMessage = "User enrollment failed for userId:{userId}, serviceId:{id}.";     


    Func<Task> act = () => EnrollUser(userId, serviceId);

    var actualException = await Assert.ThrowsAsync<Exception>(act);

    Assert.Equal(expectedMessage, actualException.Message);
}

标签: c#

解决方案


异常在EnrollUser方法中处理,因此此方法永远不会抛出异常,它将返回 BadRequest 对象,而不是您可以用来比较消息。

var result = await act;
Assert.Equal(expectedMessage, act.Request);

推荐阅读