controllerContext をパラメーターとして使用して、第 3 部ライブラリ「Rotativa」に基づいて PDF ドキュメントを生成するアクションをコントローラーでテストしたいと考えています。
アクション(関数)の実装は次のとおりです。
public ActionResult DetailsPrint(int? id)
{
var a = new ViewAsPdf();
a.ViewName = "../Ops/_2A1/Details";
a.Model =UnitOfWork._2A1s.Get(id.Value);
var pdfBytes = a.BuildPdf(ControllerContext);
// return ActionResult
MemoryStream ms = new MemoryStream(pdfBytes);
return new FileStreamResult(ms, "application/pdf");
}
そして、これが私が単体テストを機能させようとしている方法です:
コンストラクタ
public _2A1ControllerTest() { _mockRepository = new Mock<I2A1Repository>(); var mockUoW = new Mock<IUnitOfWork>(); _mockHttpContext = new Mock<HttpContextBase>(); _mockRequest = new Mock<HttpRequestBase>(); _mockDisplayModeContext = new Mock<IDisplayMode>(); mockUoW.SetupGet(u => u._2A1s).Returns(_mockRepository.Object); _mockHttpContext.SetupGet(x => x.Request).Returns(_mockRequest.Object); _controller = new _2A1Controller(mockUoW.Object); _controller.MockCurrentUser("test.admin"); _controller.ControllerContext = new ControllerContext(_mockHttpContext.Object, new System.Web.Routing.RouteData(), _controller); }
テスト機能
[TestMethod] public void DetailsPrint_shouldPrint() { var result = _controller.DetailsPrint(1) as ActionResult; result.Should().BeOfType<ActionResult>(); }
テスト名: DetailsPrint_shouldPrint テスト フルネーム: OPSReviewTest._2A1ControllerTest.DetailsPrint_shouldPrint テスト ソース: C:\inetpub\wwwroot\OpsReview\OPSReviewTest\Controllers\Api_2A1ControllerTest.cs: 46 行目 テスト結果: 失敗 テスト期間: 0:04:39,3039007 結果 StackTrace :
System.Web.WebPages.DisplayModeProvider.GetDisplayMode(HttpContextBase コンテキスト) で System.Web.Mvc.ControllerContext.get_DisplayMode() 結果メッセージ: テスト メソッド OPSReviewTest._2A1ControllerTest.DetailsPrint_shouldPrint が例外をスローしました: System.NullReferenceException: オブジェクト参照が設定されていませんオブジェクトのインスタンス。
助けや提案、ありがとう。