2017-06-27 8 views
1

質問はちょっと変わって見えるかもしれませんが、私はそれを説明します。どのような方法が実際に何を行うのか、それとも何をすべきかをユニットテストするべきですか?

以下を考慮してください: 私は他の開発者のために作成したサービス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フレームワークで可能です)。

+2

SE.SEに関連するクロスサイト複製:https://softwareengineering.stackexchange.com/q/288532/24993、https://softwareengineering.stackexchange.com/q/234024/24993(およびおそらく他のもの) – jwodder

答えて

1

単体テストはコードの正常に機能ユニット... 彼らはあなたがテストを書いている時にコードべきが、あなたは多くの場合、コーナーケースを見つけることないすべきかをテストする必要がありますのための許容基準にする必要があります。

リファクタリングコードを使用すると、多くの場合、リファクタリングテストが必要になります...これはオリジナルの努力の一部として見なされるべきであり、製品を作ってそのような大きさの改善を処理すると、 。

もちろん、これは社外(または社内の文化によっては社内)のコンシューマを持つライブラリであれば、完了する前に検討するドキュメントがあります。

編集:これらのテストはかなり弱いです。それぞれに合法的なものがあることを定義し、実際にグリフクラスのすべてのクラスの包含と除外をテストする必要があります。テスト...つまり、isValidUsername(name,allowsSpace)はスペースが許されているかどうかに応じて、ファーストネームと全体ネームの両方で動作します。

関連する問題