質問はちょっと変わって見えるかもしれませんが、私はそれを説明します。どのような方法が実際に何を行うのか、それとも何をすべきかをユニットテストするべきですか?
以下を考慮してください: 私は他の開発者のために作成したサービスFirstNameValidator
を持っていますので、人の名前を一貫して検証することができます。私はほんの数例をテストする、私はそれをテストしたいが、可能な入力のフルセットは、無限(または非常に非常に大きな)ですので:
Assert.IsTrue(FirstNameValidator.Validate("John"))
Assert.IsFalse(FirstNameValidator.Validate("$$123"))
私も99%同一である、LastNameValidator
を持っている、と私は書きましたあまりにもそれのためのテスト:
Assert.IsTrue(LastNameValidator.Validate("Doe"))
Assert.IsFalse(LastNameValidator.Validate("__%%"))
しかし、その後、新たな構造が登場 - 姓と名で構成されていPersonNameのを、。それを検証したいので、私はPersonNameValidatorを作成します。明らかに、再利用のために、私はFirstNameValidatorとLastNameValidatorを呼び出します。私はそれのためのテストを書いてみたいと思うまで、すべてが大丈夫です。
私は何をテストすべきですか?
FirstNameValidator.Validateが実際に正しい引数で呼び出されたという事実?
また、ケースをほとんど作成せずにテストする必要がありますか?
これは実際に問題です。サービスが期待していることをテストする必要がありますか? PersonNameを検証することが期待されますが、実際には気にしません。したがって、有効な入力と無効な入力をほとんどパスせず、対応する戻り値を期待します。
それとも実際には何ですか?実際には他のバリデータを呼び出すように、テストしてください(.net mockingフレームワークで可能です)。
SE.SEに関連するクロスサイト複製:https://softwareengineering.stackexchange.com/q/288532/24993、https://softwareengineering.stackexchange.com/q/234024/24993(およびおそらく他のもの) – jwodder