我正在使用ASP.NET MVC和C#开发一个webapp。我正在使用NUnit和Rhino Mock为这个webapp创建一个单元测试。我的问题是我的控制器的action方法中有一个Response对象,当我执行单元测试时,我的测试失败,因为Response对象是一个空引用。
我是否需要在操作中分离此Response对象调用,或者有更好的方法来解决此问题?
public ActionResult Login( string user, string password )
{
Response.Cookies[ "cookie" ].Value = "ck";
...
return View();
}
请告知。
非常感谢。
答案 0 :(得分:3)
这是一个令人烦恼的问题,其中ASP.NET MVC并不像它可能的那样可测试和松散耦合。有关如何模拟HTTP上下文对象的一些建议,请参阅this question。
答案 1 :(得分:0)
控制器真正缺乏的是它的HttpContext。在测试方法中,如果需要,应显式添加它:
[Test]
public void TestMethod()
{
// Assume the controller is created once for all tests in a setup method
_controller.ControllerContext.HttpContext = new DefaultHttpContext();
var result = _controller.Login("username", "verySaf3Passw0rd");
// Asserts here
}