4

私は単体テストケースを書いています。このメソッドの単体テストを作成しようとしていますが、エラーが表示されます。このメソッドを mvc3 フレームワークと rhino モックで単体テストする方法。

        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);
    }
4

1 に答える 1

5

ではResponseなく nullResponse.StatusCodeです。と をモックHttpContextBaseしてHttpResponseBaseから、コントローラーの を作成して割り当てる必要があります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.    
于 2013-01-03T07:36:47.537 に答える