2017-07-15 14 views
0

私のプロジェクトにはアプリケーションフォームがあり、ユニットテストを書いています。 私のコードビハインドでは、フィールドが空白でないことを確認するためにサーバー側の検証に必要なフィールドがあります。これは私がユニットテストを書く2日目なので、この権利を書いたかどうかを知る助けが必要です。私のユニットテストでは、私は唯一の13ユニットテストの必須フィールドc#

[Required(ErrorMessage = "Please provide a title")]   
public string Title 
{ 
    get; set; 
} 

午前素敵にしてください私は考えにフィールドが空白でないことは、このチェックを

public void TitleIsNotBlank() 
{ 
    Assert.IsNotNullOrEmpty(_vm.Title); 
} 

をしましたか?

+1

それは確かだろう。しかし、あなたの目標はあなたが何ができるか、カバレッジを向上させることであるので、ことは、それを検査してくださいそれはのような装飾されていることによって、必要とされるフィールドは「マーク」されていることを確認するためのテストです。 '[Required(ErrorMessage =" Pleaseタイトルを提供してください ")]'属性には気をつけませんが、単体テストはフィールド自体を直接テストするだけです。また、空の文字列がその属性と 'IsNotNullOrEmpty'アサーションとの間で同じ振る舞いをするという保証はないと私は考えています。 (偶然にも同じ挙動をするかもしれませんが)したがって、そのエッジケースを明示的にテストする価値があります。 – David

+0

私はその半分しか理解しませんでした。あなたはフィールドが空でもヌルでもないことだけをテストすると言っていますが、返されるエラーメッセージはそのエラーメッセージであることをテストしません。もしそうなら、私は理解する。ありがとうございます – user2903379

+0

それは正しい理解、はいです。属性の振る舞いをテストする必要は本当に必要ではありません。それはフレームワークコンポーネントであり、一般的にベンダーによってテストされるからです。どのくらいあなたがフレームワークを信用できないかによって異なります。 100%カバレッジでの単体テストは価値ある目標ですが、複雑なシステムでは、「100%」が何を意味するかについての議論と、(2)一部のコンポーネントのテスト時のリターンの低下が常にあります。 (つまり、いくつかのコードをテストする価値がテストを開発するコストを上回るとは限らないこともあります)。 – David

答えて

0

属性は[Required]属性のみを修飾しますが、機能の呼び出し時に自動的に検証されるわけではありません。

プロパティをデコレートすることによって、プロパティを調べる必要のあるプロセスとエラーメッセージの内容を調べることができます。 MVCフレームワークの検証は、たとえば、この属性内の検証を起動します。実際に検証が行われます。

私の意見では、これは理想的にはビジネスオブジェクトレベルでテストする必要があります(実際にモデルの値をオブジェクトに割り当てて、それを保存するなどして何かをしようとすると)。

属性の検証コードがテストされているため、必要ないと仮定しています。

var type = typeof(YourModelClass); 
var property = type.GetProperty("Title"); 
var attributes = (Required[])property.GetCustomAttributes(typeof(Required), false); 
Assert.IsTrue(attributes.Length > 0); 
関連する問題