繁体   English   中英

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

[英]Unit Testing Controllers with http request

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

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

}

我用以下代码构建了一个单元测试,但是请求对象的空引用出现错误

[Test]
public void Confirmation()
{
   //arrange
   var con = new xController();

   //act
   var res = con.Confirmation("hello");

   //assert
   Assert.IsNotNull(res);
}

使用MVCContribTestHelper ,您应该可以编写如下内容:

[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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM