带http请求的单元测试控制器

本文关键字:单元测试 控制器 请求 http | 更新日期: 2023-09-27 18:24:13

在C#中,我的控制器中确实有一个方法,它从请求对象获取内容。

public class xController: BaseController
{
    [HttpPost]
    [Route("confirm")]
    public void Confirmation(string Content)
    {
        var content = Request.Content.ReadAsStringAsync().Result;
    }
}

我用以下代码构建了一个单元测试,但请求对象的ref为null时出现错误。

[Test]
public void Confirmation()
{
   //arrange
   var con = new xController();
   //act
   var res = con.Confirmation("hello");
   //assert
   Assert.IsNotNull(res);
}

带http请求的单元测试控制器

使用MVCContrib中的TestHelper,您应该能够编写如下内容:

[Test]
public void Confirmation()
{
    //arrange
    TestControllerBuilder builder = new TestControllerBuilder();
    var con = new xController();
    builder.InitializeController(con);
    //act
    var res = con.Confirmation("hello");
    //assert
    Assert.IsNotNull(res);
}

您可以选择

1) 在控制器中注入HttpContextBase,并使用它来访问其任何属性,例如"Request"。

2) 模拟并设置测试中的ControllerContext。

围绕这些线的东西:

    [Test]
    public void Confirmation()
    {
        //arrange
        var mock = new Mock<HttpControllerContext>();
        mock.SetupGet(p => p.Request.Content).Returns(theObjectToBeReturned);
        var con = new xController();
        con.ControllerContext = mock.Object;
        //act
        var res = con.Confirmation("hello");
        //assert
        Assert.IsNotNull(res);
    }