带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);
}
使用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);
}