2012-02-16 14 views
3

をAssertViewRendered。私は、次の基本的なテストを持っている:場合は私のASP.NET MVC 3プロジェクトで、私はT4MVCを使用しています

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name '~/Views/Home/Index.cshtml', actual was '' 

しかし、テストは合格:

public virtual ActionResult Index() 
{ 
    return View(); 
} 

特定のエラーがある:コントローラメソッドは、デフォルトのビューを返した場合

[TestMethod] 
public void IndexReturnsIndexView() 
{ 
    var controller = new HomeController(); 
    var result = controller.Index(); 

    result.AssertViewRendered().ForView(MVC.Home.Views.Index); 
} 

テストが失敗しました私は返すためにどのviewName指定するViewをオーバーライドします。

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

テストは合格ですが、テスト自体は役に立たないようです。

すべてのビューを名前で指定する必要はありません。これをどのようにテストすればよいですか?明確にするために、私は今日N​​uGetからインストールしたMvcContrib.Mvc3.TestHelper-ci 3.0.96.0を使用しています。

UPDATEは

これは、質問への答えではないですが、私はテストケースとして、より多くの価値を提供する代わりに、以下の始めている:私はこのオープンを残し

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

答えて

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

AssertViewRendered()。ForView()は、明示的にView()に渡すビュー名に対するテストがコントローラアクションです。もしあなたがしているように、あなたのアクションにビュー名を指定しなければ、.ForView()は空の文字列に対してテストします。

View( "Index")を呼び出した場合は、あなたの行動では、テストの.ForView( "Index")を呼び出すことができます。

私はこのアサーションは、あなたのアクションが異なる可能なビューを返すことができるなら、最も有用だろうと思います。

関連する問題