たとえば、次のテストがあります。
[Test]
public void MyTest( [RandomNumbers( Count=100, Minimum=0, Maximum=1000 )] int number )
{
...
}
そして、ある時点で、私の通常のビルドプロセス中に失敗しました。電子メールの通知を受け取り、調査に取り掛かりました。
ここで、Visual Studioでテストを開き、[テストの実行]をクリックすると、合格します。私はそれをもう一度やります、そしてそれは再び通過します。そしてまた。そしてまた。明らかに、失敗はその特定の乱数シーケンスに関連していました。
したがって、問題は次のとおりです。その正確なシーケンスでこのテストを再実行するにはどうすればよいですか?
(ガリオの完全なレポートがある場合)
更新:(
それが悪い考えであるというコメントに続いて)
まず、私は実際にそれが良い考えであるかどうかを尋ねていません。質問は異なります。
第2に、テスト対象のシステムが十分に複雑で、入力データスペースが複数の独立した次元である場合、そのスペースを同等の領域に適切に分割することは、精神的な努力と時間の両方で重大な課題を提示します。システムの一部は、すでに独自にテストされています。同時に、あちこちでシステムを突くことができたら、そうしてみませんか?
第三に、私は実際にはこの分野の初心者ではありません。私は常にこの手法を他のテストフレームワーク(csUnitやNUnitなど)で使用しましたが、微妙なバグを見つけるのに非常に成功しました。当時、生成されたデータなどの概念はなかったのでSystem.Random
、あらかじめ決められたシードの形で独自のカスタム松葉杖を使用しました。そのシードは、フィクスチャの初期化の一部として(通常は現在の時刻に基づいて)生成され、ログに注意深く書き込まれていました。このようにして、テストが失敗したときに、ログからシードを取得し、それをテストフィクスチャに接続して、まったく同じテストデータのセットを取得できるため、デバッグにまったく同じ失敗が発生します。
そして第四に、それがそのような悪い考えであるならば、なぜRandomNumbers
工場はそもそも存在するのですか?