2009-04-15 9 views
2

私は人々がコントローラテストをどのように整理するかに関するきちんとした提案を探しています。例えばMVCコントローラテストをどのように構成しますか?

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Add() 
{ 
    var editAddress = new DTOEditAddress(); 
    editAddress.Address = new Address(); 
    editAddress.Countries = countryService.GetCountries(); 

    return View("Add", editAddress); 
} 

[RequireRole(Role = Role.Write)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(FormCollection form) 
{ 
    // save code here 
} 

、私の「住所」のコントローラの機能を「追加」を取る私は、固定具が"when_adding_an_address"と呼ばれるかもしれません、しかし、私はこのタイトルの下でテストする必要がある2つのアクションがあります...

フィクスチャのAct()メソッドで両方のアクションを呼びたくないので、フィクスチャを半分に分割しますが、どのように名前を付けますか?

"When_adding_an_address_GET"および"When_adding_an_address_POST"

物事はちょうど乱雑になっているようです。

また、コントローラのステートレス/セトゥプレスアサーションについてはどのように対処しますか?これらはどのようにアレンジしますか?例えば:

[Test] 
public void the_requesting_user_must_have_write_permissions_to_POST() 
{ 
    Assert.IsTrue(this.SubjectUnderTest.ActionIsProtectedByRole(c => c.Add(null), Role.Write)); 
} 

これは私が知っているカスタムコードですが、あなたのアイデアを得る必要があり、それは単にフィルタ属性がメソッドに存在していることを確認します。要は、Arrange()またはAct()を必要としません。

ヒントをどうぞ!

ありがとうございました

答えて

0

まあ、13ヵ月後と回答がありません。驚くばかり。

相続人は私が今何をすべきか:私の意見、あなたがテストしているメソッドの後にテストを命名することを忘れるべきでは

/tests/controllers/address/add/get.cs 
/tests/controllers/address/add/valid.cs 
/tests/controllers/address/add/invalid.cs 
1

。実際、単一のメソッドをテストするのは奇妙なコンセプトです。あなたはクライアントがあなたのコードを使って行うことを一つテストするべきです。たとえば、POSTとGETでaddを打つことができれば、あなたが提案したように2つのテストを書くべきです。特定の例外的なケースで何が起こっているのかを見たい場合は、別のテストを書くべきです。あなたはどの言語でこれを行うと、必要であれば任意の* DDの命名規則を選ぶことができます

@Test public void shouldRedirectToGetWhenPostingToAdd(){ 
    //... 
} 

が、ポイントは、ということです。

私は通常、彼はJavaで知っておく必要があるものメンテナを伝える名前を選びますテスト名は期待とシナリオを伝えるべきです。あなたはこのように非常に小さなテストを取得し、私はこれを良いものと考えています。

関連する問題