2011-01-20 19 views
4

ASP.NET MVC 2アプリケーションをテストするときに、ビューを見つけることができなかったときに問題が発生しました。ASP.NET MVCのビューの欠落の回避

コードを見ると、ビューのaspxファイルがソース管理リポジトリに追加されていないことがわかりました。このプロジェクトでは、ソース管理にStarTeamを使用しているため、非常に簡単です。チェックイン時に新しいフォルダが表示されません。このビューは新しいコントローラのためであり、新しいフォルダが作成されてしまいました。

ビルドサーバー(Hudson/MSBuildを使用)は、aspxファイルが見つからずにコードが正常に構築されるため、これを選択しませんでした。私たちのコントローラユニットはActionResultsをテストしてテストしますが、明らかにまだそこを見ることはできません。

これはシステムテストで取り上げられましたが、これを以前の(ビルドサーバー上の)理想的な方法で捕捉するにはどうすればよいでしょうか。あなたは、実際のビューをテストするユニットテストを書くことができ、その後、ユニットテストはビルドサーバーに合格しない場合には、事前

+0

WatiNのようなUIテストフレームワークを使用できます。ビューがレンダリングされるテストを書くだけです。 –

答えて

2

おかげで、あなたが問題を抱えている知っています。これを行うには、このようなフレームワークを使用することができます。
http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/

をこれであなたは、あなたが実行しているのStarTeamのバージョンは何

[Test] 
public void Root_Url_Renders_Index_View() 
{ 
    appHost.SimulateBrowsingSession(browsingSession => { 
     // Request the root URL 
     RequestResult result = browsingSession.ProcessRequest("/"); 

     // You can make assertions about the ActionResult... 
     var viewResult = (ViewResult) result.ActionExecutedContext.Result; 
     Assert.AreEqual("Index", viewResult.ViewName); 
     Assert.AreEqual("Welcome to ASP.NET MVC!", viewResult.ViewData["Message"]); 

     // ... or you can make assertions about the rendered HTML 
     Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html")); 
    }); 
} 
+0

偉大な答え... – Paddy

1

(ポストから)このようなユニットテストを書くことができますか?選択したプロジェクト/ビュー内のStarTeam 2008(この機能が初めて追加されたときはわかりません)では、メニューFolder Tree->Show Not-In-View Foldersから選択できます。これにより、プロジェクトに追加されていないローカルディスク上のフォルダが表示されます(フォルダアイコンが白で表示されます)。

+0

2006年ですが、同じ機能があります。私はそれを行うことができることを知っているが、問題は私がそれを行うことを忘れていると私のビルドはそれを拾いませんでしたので、私はそれについて3週間後に判明: –

0

これは古い質問ですが、まだ誰かがこれを探している場合は、SpecsFor.Mvc by Matt Honeycuttを試してください。

Viewsがソースコントロールに正しく追加/追加されていることを確認するだけでなく、Viewsが有効であることを確認するための統合テストを行うこともできます。同社のウェブサイトへ

リンク:nugetパッケージにhttp://specsfor.com/SpecsForMvc/default.cshtml

リンク:https://www.nuget.org/packages/SpecsFor.Mvc/

githubのへのリンク:https://github.com/MattHoneycutt/SpecsFor

ここではそれを使用する方法を示すWebサイトから取得したコードスニペットです。

public class UserRegistrationSpecs 
{ 
    public class when_a_new_user_registers : SpecsFor<MvcWebApp> 
    { 
     protected override void Given() 
     { 
      SUT.NavigateTo<AccountController>(c => c.Register()); 
     } 

     protected override void When() 
     { 
      SUT.FindFormFor<RegisterModel>() 
       .Field(m => m.Email).SetValueTo("[email protected]") 
       .Field(m => m.UserName).SetValueTo("Test User") 
       .Field(m => m.Password).SetValueTo("[email protected]!") 
       .Field(m => m.ConfirmPassword).SetValueTo("[email protected]!") 
       .Submit(); 
     } 

     [Test] 
     public void then_it_redirects_to_the_home_page() 
     { 
      SUT.Route.ShouldMapTo<HomeController>(c => c.Index()); 
     } 

     [Test] 
     public void then_it_sends_the_user_an_email() 
     { 
      SUT.Mailbox().MailMessages.Count().ShouldEqual(1); 
     } 

     [Test] 
     public void then_it_sends_to_the_right_address() 
     { 
      SUT.Mailbox().MailMessages[0].To[0].Address.ShouldEqual("[email protected]"); 
     } 

     [Test] 
     public void then_it_comes_from_the_expected_address() 
     { 
      SUT.Mailbox().MailMessages[0].From.Address.ShouldEqual("[email protected]"); 
     } 
    } 
} 
関連する問題