2009-09-30 16 views
7

私はasp.net mvcアプリケーションで作業しており、ユニットテストでBDDスタイルを作成しています。 例ASP.net MVC RTMテストの命名規則

GetResource_WhenResourceFileExists_ShouldReturnResources()

しかし、私は私のコントローラのテストを書いていたとき、私は通常、同じ名前の2つの方法があります。 1つは取得要求用のパラメータなし、1つは投稿用です。誰かがこの2つを区別するための良い命名規則を持っていますか?

1. 
LogIn_WithParameters_ShouldReturnLogInView() 
LogIn_WithoutParameters_WhenAuthenticationFailed_ShouldReturnLogInView() 
LogIn_WithoutParameters_WhenAuthenticationPassed_ShouldReturnProfileRedirect() 

2. 
LogIn_Get_ShouldReturnLogInView() 
LogIn_Post_WhenAuthenticationFailed_ShouldReturnLogInView() 
LogIn_Post_WhenAuthenticationPassed_ShouldReturnProfileRedirect() 

3. 
LogIn_ShouldReturnLogInView() 
LogIn_WhenCalledWithParametersAndAuthenticationFailed_ShouldReturnLogInView() 
LogIn_WhenCalledWithParametersAndAuthenticationPassed_ShouldReturnProfileRedirect() 

どれ意見:

私が考えることができますか?

答えて

1

これは単体テストの厳密な命名規則が魅力的でない理由の完全な例だと思います。

提案されたスキームは、2つのメソッドオーバーロードがある場合にのみ機能します.1つはパラメータあり、もう1つはパラメータなしです。異なるパラメータで複数の過負荷が発生するシナリオには適用されません。

個人的に私はこれが私に

SutIsPathResolutionCommand 
ExecuteWithNullEvaluationContextWillThrow 
ExecuteWillAddDefaultClaimsTransformationServiceWhenNoConnectionServiceIsAvailable 

私のテストに名前を付けるための柔軟性を提供します私はめったにの名前を読んでいないことを認めなければならない

[Action][Will|Should|Is|...][Result] 

ように要約することができる非常に緩い命名規則を好みますとにかくテスト。代わりに、私はそれが何をしているかの仕様(すなわち、テストコード)を読んでいます。名前は私にとってそれほど重要ではない。

3

私は私のために非常によく動作し、次の形式を使用します。私は特に好きではない

[TestFixture]  
public class Log_in_with_parameters_should 
{ 
    [Test] 
    public void Return_the_log_in_view() {} 
} 

[TestFixture]  
public class Log_in_without_parameters_should 
{ 
    [Test] 
    public void Return_the_log_in_view_when_the_authentication_failed() {} 

    [Test] 
    public void Redirect_to_the_profile_when_the_authentication_passed() {} 
} 
1

1つのオプションは、コントローラのアクションに異なる名前を与えることですが、その後に使用してそれらの名前を変更ActionName属性:

public ActionResult Login() { 
    // ... code ... 
    return View(); 
} 

[HttpPost] 
[ActionName("Login")] 
public ActionResult LoginPost(... some params ...) { 
    // ... more code ... 
    return View(); 
} 

これは、基本的に1つの問題(ユニットテストの命名)を別の問題(コントローラコードを読みにくくする)で置き換えたものです。それにもかかわらず、上記の問題を解決するので、このパターンが魅力的かもしれません。

0

私はあなたの質問に答えていないかもしれませんが、私がしていることを分かち合いたいと思います。 私は特定の命名規則に従っていませんが、どのテストメソッドがテストしようとしているかを説明する名前を付けようとしています。私は説明を追加する必要がある場合もあります。[Test( "このテストでは、特定のユーザーが回答した質問の数を評価します)]]

テストがより読みやすく、すぐに理解できることを確かめるための1つのことです。あなたはパラメータを渡している場合 - - 読者がそれらについてspeacialが何であるかを知っているよう

1

私はあなたの質問すなわちで1に似た命名規則を使用するには、私はあなたが「シナリオ」の部分に、より詳しく説明すべきだと思う をmethod_scenario_expected 。

このようにテストに名前を付けることは、「TDDはありません」であり、BDD-BDDテストの名前はルールや「ビヘイビア」に関するものではありません。

現在の命名規則でコードの可読性が損なわれていないと思われる場合は、自由に実験して効果的なものを見つけてください。