テスト中にNUnitを使用して乱数を生成しようとしていますが、同じ番号が生成され続けます。私はこの目的のために次の関数を使用しています。テストで実行したときに生成された同じ乱数Fixtureの設定
dim dCount As Integer = Math.Floor((High - Low + 1) * Rnd() + Low)
dim divName As String = "abc" & dCount
なぜこれを行うのですか?
よろしく、
サム
テスト中にNUnitを使用して乱数を生成しようとしていますが、同じ番号が生成され続けます。私はこの目的のために次の関数を使用しています。テストで実行したときに生成された同じ乱数Fixtureの設定
dim dCount As Integer = Math.Floor((High - Low + 1) * Rnd() + Low)
dim divName As String = "abc" & dCount
なぜこれを行うのですか?
よろしく、
サム
おそらくあなたが立て続けに多くのテストを実行しています。私はVBでRnd()
が何をするのか正確にはわかりませんが、典型的な "新しいRNG per call"という問題があるようです。
Random
という1つのインスタンスを作成し、それを繰り返し使用します。 - Random
はスレッドセーフではありません
dim dCount as Integer = myRandom.Next(Low, High+1)
1つの警告:あなたの数学は簡単な置き換えを行うことができます。異なるスレッドから乱数を生成する必要がある場合は、either use locking or thread statics。
別のポイント:乱数を使用すると、ユニットテストが非決定的になります。あなたはする必要がありますか?場合によっては適切ですが、しばしばIMEではありません。
Rnd()は、0 <= r <1 ...の範囲の単一の値を返します。ユニットテストでランダムに生成されたデータを使用しないで2番目にする必要があります。あなたの予想される範囲の内側と外側を明示的にテストする方がはるかに優れています。 –
個人的には、私は固定されたシードを持つ乱数を推奨します(もちろん明示的な制限ケースもあります)。そうすれば、大量のデータを簡単にテストし、欠落している可能性のある微妙な問題に直面することができますが、回帰の目的で常に同じテストを繰り返します。 – Kena
Dim dCount As Integer = between(low, high)
Dim divName As String = "abc" & dCount
Dim myRandom As New Random
Private Function between(ByVal low As Integer, ByVal high As Integer) As Integer
between = myRandom.Next(low, high + 1)
End Function
4はランダムであることが保証されています。プラスあなたがそれをテストすることができます。 – garrow