如何在Web API中对冲突响应的错误消息进行单元测试

时间:2019-11-07 15:27:12

标签: c# unit-testing asp.net-web-api

这是我的终点:

Sub Test()

Dim rng As Range
Dim lr As Long

With Sheet1.Range("A:A") 'Change to your own sheets CodeName
    Set rng = .SpecialCells(xlCellTypeConstants, 1)
    Set rng = rng.Areas(rng.Areas.Count)
    lr = rng.Cells(rng.Cells.Count).Row
End With

End Sub

如何对错误消息进行单元测试?

这是一个测试模板:

public IHttpActionResult Work()
{
    try
    {
        this.Service.DoWork();
        return this.Ok();
    }
    catch (SomeException)
    {
        return this.Content(HttpStatusCode.Conflict, new { Message = "The message" });
    }
}

2 个答案:

答案 0 :(得分:2)

您快到了。

您需要将结果转换为ApiController返回的实际类型,并提取期望的数据。

[Test]
public void Work_Conflict()
{
    this.Service.Setup(x => x.DoWork()).Throws<SomeException>();
    IHttpActionResult result = this.MyController.Work();
    var objectResult = result as ObjectResult;
    Assert.IsNotNull(objectResult);
    dynamic model = objectResult.Value;
    string actual = (string)model.Message;
    string expected = "The message";
    Assert.AreEqual(expected, actual);
}

答案 1 :(得分:-2)

尝试一下: BadRequestObjectResult来自Microsoft.AspNetCore.Mvc命名空间

    public void Work_Conflict()
    {
        //Arrange

        this.Service.Setup(x => x.DoWork()).Throws<SomeException>();

        using (var controller = new MyController()) ;

        //Act
        var result = MyController.Work();
        var badRequest = result as BadRequestObjectResult;

        //Assert
        var conflictCode = 0;
        Assert.AreEqual(conflictCode, badRequest.StatusCode);
        Assert.AreEqual("The message", badRequest.Value);

    }