Kir*_*ein 9 c# ajax asp.net-mvc unit-testing moq
我的一些控制器操作需要响应不同的ViewResults,具体取决于它们是否被AJAX请求调用.目前,我正在使用该IsAjaxRequest()方法来检查这一点.在单元测试期间调用此方法时,它会抛出一个ArgumentNullException因为缺少HTTP上下文.
有没有办法模拟/伪造这个电话?或者这是一个标志,我应该用另一种方式检查AJAX请求?
Mar*_*ann 12
如果您为HTTP上下文提供Test Double会有帮助吗?
这可以这样做:
var httpCtxStub = new Mock<HttpContextBase>();
var controllerCtx = new ControllerContext();
controllerCtx.HttpContext = httpCtxStub.Object;
sut.ControllerContext = controllerCtx;
Run Code Online (Sandbox Code Playgroud)
其中sut代表被测系统(SUT),即您要测试的控制器.
此示例使用Moq.
moq在 MVC 测试项目中使用库
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void Index()
{
// Arrange
HomeController controller = new HomeController();
controller.injectContext();
// controller.injectContext(ajaxRequest: true);
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
}
public static class MvcTestExtensions
{
public static void injectContext(this ControllerBase controller, bool ajaxRequest = false)
{
var fakeContext = new Mock<ControllerContext>();
fakeContext.Setup(r => r.HttpContext.Request["X-Requested-With"])
.Returns(ajaxRequest ? "XMLHttpRequest" : "");
controller.ControllerContext = fakeContext.Object;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |