2012-01-26 5 views
0

ASP.NET MVC 3プロジェクトでテンプレートヘルパーを使用しています。 1つの表示テンプレートに誤った余分なコードブロックがあり、そのビューが返されたときにコンパイラエラーが発生しました(「コードブロックに@ifを入れないでください」)。エラーでMVCビューテストを失敗できません

このビューを呼び出すテストメソッドがまだ成功していたことを除いて、すべて罰金がかかりました。私は単体テストでこのコードブロックがどのように失敗するかを調べるのに苦労しています。

はここで悪い表示テンプレートです:

[TestMethod] 
public void DetailsReturnsView() 
{ 
    MemberJobController target = new MemberJobController(TestHarness.Context); 
    memberjob mj = TestHarness.UnitOfWork.MemberJobRepository.FirstOrDefault(x => true); 

    ActionResult result = target.Details(mj.idmemberjob); // <- this should hit the compiler error, I would have thought 

    Assert.IsNotNull(result); 

} 

しかし、そのテストが成功した:

@model MemberSelectorViewModel 
@{ 
    Layout = "~/Views/Shared/_DisplayFormItem.cshtml"; 
} 
@section DataContent { 
    @{ // <- this was the typo, and it... 
    @if (Model.idMember.HasValue) // <- causes this to throw a compiler error 
    { 
     @Html.ActionLink(Model.FullName, "Details", "Member", new { id = Model.idMember.Value }, null) 
     @Html.HiddenFor(m=> m.idMember) 
    } 
    } 
} 

ここで私は失敗するべきだと思うのテストです。

テンプレートヘルパーの "@ {@if()"のタイプミスで失敗するテストをどのように書くか考えてみましょうか?

答えて

1

あなたは、ユニットテストがコントローラ上でどのように機能するかについて誤解していると思います。彼らは実際には実際にビューに当たらなかった。だからあなたがあなたのビューで行ったエラーの数にかかわらず、単体テストでコントローラアクションを呼び出すと、そのアクションの本体が実行されます。それだけです。それは決して景色には行きません。

ビューをテストする場合は、もはや単体テストを行っていません。ステージングサーバーにデプロイされているサイトにHTTPリクエストを送信し、返されたHTMLが要件を満たしていることを確認する統合テストを行っています。この場合、あなたの見解の中にタイプミスなどがあった場合、実際のHTMLは特定のコントローラーのアクションをHTTPリクエストでヒットしたときに返されます。

+0

もちろん、ああ。明らかに私はMVCのブードゥーの一部をまだ手に入れていないので、テストビューをユニット化するためのプリコンパイルツールが必要です。 –

+0

それは重要ではありませんが、私はこれを統合テストとは考えません。ビューをテストするためにコントローラをインスタンス化する必要があることは事実ですが、哲学的には理想的なコントローラです。テスト対象ではなく、テストフィクスチャの一部です。しかし、それはここにもそこにはありません... –

関連する問題