我正在编写单元测试用例。我正在尝试为此方法编写单元测试但显示错误。如何在 mvc3 框架和 rhino mock 中对该方法进行单元测试。
public ActionResult UnderConstruction()
{
Response.StatusCode = (int)HttpStatusCode.TemporaryRedirect;
ErrorModel model = new ErrorModel()
{
ErrorMessage = "This page is still under construction; please check back later.",
Title = "Under Construction"
};
return View("Error", model);
}
最佳答案
Response
为 null,而不是 Response.StatusCode
。您需要模拟 HttpContextBase
和 HttpResponseBase
,然后创建并分配 Controller 的 ControllerContext
。
测试看起来像这样(抱歉,如果我捏造了 Rhino Mock 代码;我通常使用 Moq):
// arrange
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var request = MockRepository.GenerateMock<HttpRequestBase>();
var response = MockRepository.GenerateMock<HttpResponseBase>();
// stub both Request and Response, for good measure.
httpContext.Stub(x => x.Request).Return(request);
httpContext.Stub(x => x.Response).Return(response);
var controller = new YourController();
// create and assign the controller context
var context = new ControllerContext(httpContext,
new RouteData(),
controller);
controller.ControllerContext = context;
// act
var actual = controller.UnderConstruction() as ViewResultBase;
// assert
Assert.That(actual, Is.Not.Null);
Assert.That(controller.Response.StatusCode, Is.EqualTo(HttpStatusCode.TemporaryRedirect));
// etc.
关于c# - Response.StatusCode 在 nunit 测试中为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14134658/