私のドメインにはランダムに決定された選択が含まれており、単体テスト方法はわかりません。ランダムな選択肢をテストするにはどうすればよいですか?
些細な例として、私はそのmyobject.makeChoice()
戻り、時間のtrue
75%と時間のfalse
25%を確保したいとしましょう。どのように私はこれをユニットテストすることができますか?
私は
myobject.getChoiceAPercent()
が75であることを主張することができ、それは実際の結果をテストしていないので、その は、些細な有用ではない、と満足できないようです。私は
myobject.makeChoice()
千回実行し、それが は時間のtrue
70%〜80%パーセント、またはそのようないくつかの統計 方法を返しますが、そのそれは、壊れやすい遅い、と 不十分なようだと主張することができます。Iが所定の乱数発生器又は ランダムシードとユニットテストを実行し、その
makeChoice()
ランを5回アサートすることができ、例えば、[true, true, false, true, true]
を返し、それはそのランダム(123)== 456をアサートするよう 同じですそして、私は実際のドメインをテストすることはないので、また、私が興味不十分なようだ。
ランダムな選択は乱数発生器自体ではなく、ユニットテストの帰納的推論で正しい証明できるようです。ランダムに生成されたコンテンツは、自動テストに適していないか、私が気付いていない簡単な方法がありますか?
[編集]のは、次の実装を想定してみましょう、など「ランダム擬似」対「真のランダム」をめぐる紛争を避けるために:
public boolean makeChoice() {
return this.random.nextDouble() < 0.75;
}
私はユニットテストのmakeChoice
戻りtrue
約75%ということにはどうすればよいです時間?
私は混乱しています。ランダムであれば、定義によって無作為にすることなく、75%と25%にとどまるように動かす方法はありません。 – Andy
質問を明確にする実装を追加しました。 –
別の質問があります。あなたのコードは真実を返すはずです。空間の75%、私は1000チャンスで750個のtruesを返さなければなりません。あるいは100チャンスで75を返します。 –