[英]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);
}
使用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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.