ASP.NET MVC 3 プロジェクトで T4MVC を使用しています。次の基本的なテストがあります。
[TestMethod]
public void IndexReturnsIndexView()
{
var controller = new HomeController();
var result = controller.Index();
result.AssertViewRendered().ForView(MVC.Home.Views.Index);
}
コントローラー メソッドが既定のビューを返す場合、テストは失敗します。
public virtual ActionResult Index()
{
return View();
}
与えられたエラーは次のとおりです。
MvcContrib.TestHelper.ActionResultAssertionException: Expected view name '~/Views/Home/Index.cshtml', actual was ''
しかし、 をオーバーライドしてどちらを返すView
かを指定すると、テストはパスします。viewName
public virtual ActionResult Index()
{
return View(MVC.Home.Views.Index);
}
次のアサーションを使用してみましたが、まだうまくいきません:
result.AssertViewRendered().ForView(MVC.Home.Index().GetT4MVCResult().Action);
次のエラーが発生します。
MvcContrib.TestHelper.ActionResultAssertionException: Expected view name 'Index', actual was ''
その後、アサーションの失敗を読み間違えたことに気付いたので、テストを次のように変更しました。
result.AssertViewRendered().ForView(String.Empty);
テストはパスしますが、テスト自体は役に立たないようです。
すべてのビューを名前で指定する必要がないようにしたいので、どうすればこれをテストできますか? 明確にするために、今日 NuGet からインストールしたMvcContrib.Mvc3.TestHelper-ci 3.0.96.0を使用しています。
アップデート
これは質問に対する答えではありませんが、代わりに次のことを始めました。これにより、テスト ケースとしてより多くの価値が得られます。
using (var controller = new FeatureController(mockGateway))
{
// Act
var result = controller.Index();
var model = result.ViewData.Model as MyModel;
// Assert
Assert.IsNotNull(model, "Model is null or wrong type");
result.AssertViewRendered().WithViewData<MyModel>();
// Alternative Assert for model data
Assert.IsTrue(model.Items.Count > 0);
}