1
ASP.NET MVCコントローラの統合テストを作成しようとしています。私のコントローラでは、私はAJAXに復帰して、それを文字列にビューをレンダリングするためにコントローラのアクションで、このヘルパー関数を使用し、このユニットテストでのASP.NET MVCレンダービュー
private string Render(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View,
ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
のようなものである文字列にカミソリビューをレンダリングするためにヘルパー関数を使用し、以下のように呼び出しますアクション
[HttpPost]
public virtual ActionResult TestAction()
{
var model = GetModel();
var razorViewToString = Render("TestAction", model);
var data = new
{
html = razorViewToString
};
return Json(data, JsonRequestBehavior.AllowGet);
}
私は、コードを実行すると
[Test]
public void TestActionTest()
{
var request = new Mock<HttpRequestBase>();
request.SetupGet(x => x.IsAuthenticated).Returns(true);
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var controller = new Controller();
var routeData = new RouteData();
routeData.Values.Add("controller", "TestController");
routeData.Values.Add("action", "TestAction");
var controllerContext = new ControllerContext(context.Object, routeData, controller);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
controller.ControllerContext = controllerContext;
var result = controller.TestAction();
// assert
}
に従うことは、この例外を考え出すだろうと、私は上記のアクションのためのテストを書いた:
ControllerContextののDisplayModeがnullであることをので、どうやらそれはです。私もそれを嘲笑しようとしたが、それは同じエラーが付属しています。
ユニットテストでビューをレンダリングするにはどうすればよいですか?
controller.TestAction()はrender自体を実行し、JSONとして返します。私はブラウザでアプリケーションを実行するが、単体テストでは動作しません。 – Shahin
この時点で、応答にコンテンツをレンダリングするViewResultがあるためです。 [ライフサイクルの要求](https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/59/14/2425.image.png) –
私はTestActionがViewResultを返さないと言っています – Shahin