私のプロジェクトにはアプリケーションフォームがあり、ユニットテストを書いています。 私のコードビハインドでは、フィールドが空白でないことを確認するためにサーバー側の検証に必要なフィールドがあります。これは私がユニットテストを書く2日目なので、この権利を書いたかどうかを知る助けが必要です。私のユニットテストでは、私は唯一の13ユニットテストの必須フィールドc#
[Required(ErrorMessage = "Please provide a title")]
public string Title
{
get; set;
}
午前素敵にしてください私は考えにフィールドが空白でないことは、このチェックを
public void TitleIsNotBlank()
{
Assert.IsNotNullOrEmpty(_vm.Title);
}
をしましたか?
それは確かだろう。しかし、あなたの目標はあなたが何ができるか、カバレッジを向上させることであるので、ことは、それを検査してくださいそれはのような装飾されていることによって、必要とされるフィールドは「マーク」されていることを確認するためのテストです。 '[Required(ErrorMessage =" Pleaseタイトルを提供してください ")]'属性には気をつけませんが、単体テストはフィールド自体を直接テストするだけです。また、空の文字列がその属性と 'IsNotNullOrEmpty'アサーションとの間で同じ振る舞いをするという保証はないと私は考えています。 (偶然にも同じ挙動をするかもしれませんが)したがって、そのエッジケースを明示的にテストする価値があります。 – David
私はその半分しか理解しませんでした。あなたはフィールドが空でもヌルでもないことだけをテストすると言っていますが、返されるエラーメッセージはそのエラーメッセージであることをテストしません。もしそうなら、私は理解する。ありがとうございます – user2903379
それは正しい理解、はいです。属性の振る舞いをテストする必要は本当に必要ではありません。それはフレームワークコンポーネントであり、一般的にベンダーによってテストされるからです。どのくらいあなたがフレームワークを信用できないかによって異なります。 100%カバレッジでの単体テストは価値ある目標ですが、複雑なシステムでは、「100%」が何を意味するかについての議論と、(2)一部のコンポーネントのテスト時のリターンの低下が常にあります。 (つまり、いくつかのコードをテストする価値がテストを開発するコストを上回るとは限らないこともあります)。 – David