[解決済み] Unit Testsでランダムデータ?
質問
フィールドをランダムなデータで埋めるオブジェクトのユニットテストを書いている同僚がいます。彼の理由は、通常のテストが単一の静的な値しか使用しないのに対して、多くの異なる値をテストするので、より広い範囲のテストを提供することです。
私は彼にこれに対するさまざまな理由を説明しましたが、主なものは次のとおりです。
- ランダムな値は、テストが本当に再現可能でないことを意味します(これは、テストがランダムに失敗する可能性がある場合、ビルドサーバー上でそれが起こり、ビルドが壊れる可能性があることも意味します)。
- ランダムな値でテストが失敗した場合、a) オブジェクトを修正し、b) 毎回その値でテストするように自分自身に強制する必要がある、そうすれば、それが動作することがわかるが、ランダムなので、その値が何だったかはわからない
もう一人の同僚が追加しました。
- 例外をテストしている場合、ランダムな値では、テストが期待される状態で終了することを保証できません。
- ランダムなデータは、システムのフラッシュアウトや負荷テストに使用され、ユニットテストには使用されません。
このようなことを止めさせるために、私が彼に言える追加の理由を、誰か追加できますか?
(あるいは、これはユニットテストの書き方として許容できるもので、私やもう一人の同僚は間違っているのでしょうか?)
解決方法は?
妥協案がある。あなたの同僚は実は何かを掴んでいるのですが、そのやり方が間違っているようです。完全にランダムなテストがあまり有用であるとは思えませんが、無効でないことは確かです。
プログラム(またはユニット)仕様とは、それを満たす何らかのプログラムが存在するという仮説である。そして、プログラムそのものがその仮説の証拠となる。ユニットテストのあるべき姿は、そのプログラムが仕様通りに動作することを反証する試みである。
さて、単体テストを手で書くこともできますが、これは本当に機械的な作業です。自動化することもできます。仕様書を書くだけで、機械があなたのコードを壊そうとする単体テストを大量に生成してくれるのです。
どのような言語を使っているのかわかりませんが、こちらをご覧ください。
ジャワ http://functionaljava.org/
Scala (またはJava) http://github.com/rickynils/scalacheck
ハスケル http://www.cs.chalmers.se/~rjmh/QuickCheck/
.NETを使用しています。 http://blogs.msdn.com/dsyme/archive/2008/08/09/fscheck-0-2.aspx
これらのツールは、整形された仕様を入力とし、自動生成されたデータを使って、必要なだけの単体テストを自動的に生成します。これらのツールは、あなたのコードを破壊する最も単純なテストケースを見つけ、それがエッジケースをうまくカバーすることを確認するために、quot;shrinking" 戦略(あなたが調整することができます)を使用します。
Happy testing!
関連
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] TDDのためのJavaScriptユニットテストツール
-
[解決済み] ユニットテストの妥当なコードカバレッジは何%ですか(とその理由)?[クローズド]です。
-
[解決済み] ディレクトリ内のすべてのPythonユニットテストを実行するにはどうすればよいですか?
-
[解決済み] データベース駆動型アプリケーションのユニットテストに最適な戦略とは?
-
[解決済み】ユニットテストを実行せずにMavenプロジェクトをビルドする
-
[解決済み】Xcodeのユニットテストで@testableを使用すると「No such module」と表示される。
-
[解決済み] Unit Testsでランダムデータ?
-
[解決済み】ユニットテストについて語るときの「DAMP not DRY」の意味とは?
-
[解決済み] 例:無効なutf8文字列?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] モッキングとは?
-
[解決済み] NUnit vs. MbUnit vs. MSTest vs. xUnit.net [終了しました。]
-
[解決済み] プライベートメソッドをテストすべきか、パブリックメソッドのみをテストすべきか?[クローズド]
-
[解決済み】mochaのテスト用ディレクトリを指定するには?
-
[解決済み】Arduinoのコードをユニットテストするにはどうしたらいいですか?
-
[解決済み] いつモックすればいい?
-
[解決済み] 既存のプロダクションプロジェクトにユニットテストをうまく追加することができますか?もしそうなら、どのように、そして、それは価値があるのでしょうか?
-
[解決済み] "エラー。Karma-Jasmineのユニットテストケースを書いているときに「No provider for router」というエラーが発生しました。
-
[解決済み] ユニットテストとは、どのようなもので、どのように行うのですか?[重複あり]
-
[解決済み] 例:無効なutf8文字列?