2012-01-30 66 views
2

在我的Controller Action中,我使用Response.SetCookie(myCookie)方法设置Cookie。 在我的单元测试方法中,我想使用模拟或更好的存根检查是否所有参数都已正确设置。我使用MvcContrib TestHelper来设置HttpContext,但我不知道如何将我的假响应对象传递给它。我正在使用Moq和MvcContrib。使用MvcContrib测试Response.SetCookie()

回答

1

您需要自己模拟TestControllerBuilder上的HttpContext属性。 HttContext被标记为受保护的,所以你的测试类需要从TestControllerBuilder继承来设置它。我是这样做的:

[TestClass] 
public class SampleTest : TestControllerBuilder 
{ 
    [TestMethod] 
    public void TestLogOnActionSetsCookie() 
    { 
     var httpContextMock = new Mock<HttpContextBase>(); 
     var responseMock = new Mock<HttpResponseBase>(); 
     httpContextMock.Setup(c => c.Response) 
      .Returns(responseMock.Object); 

     responseMock 
       .Setup(r => r.SetCookie(It.IsAny<HttpCookie>())) 
       .Verifiable(); 

     var controller = new AccountController(); 

     base.HttpContext = httpContextMock.Object; 
     base.InitializeController(controller); 

     controller.LogOn(); 

     responseMock.Verify(); 
    } 
}