Response Object是Controller的action方法中的空引用

时间:2011-06-30 08:10:38

标签: asp.net-mvc

我正在使用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();
}

请告知。

非常感谢。

2 个答案:

答案 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
}