2009-02-26 7 views
0

テスト中にNUnitを使用して乱数を生成しようとしていますが、同じ番号が生成され続けます。私はこの目的のために次の関数を使用しています。テストで実行したときに生成された同じ乱数Fixtureの設定

dim dCount As Integer = Math.Floor((High - Low + 1) * Rnd() + Low) 
dim divName As String = "abc" & dCount 

なぜこれを行うのですか?

よろしく、

サム

+0

4はランダムであることが保証されています。プラスあなたがそれをテストすることができます。 – garrow

答えて

1

おそらくあなたが立て続けに多くのテストを実行しています。私は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ではありません。

+0

Rnd()は、0 <= r <1 ...の範囲の単一の値を返します。ユニットテストでランダムに生成されたデータを使用しないで2番目にする必要があります。あなたの予想される範囲の内側と外側を明示的にテストする方がはるかに優れています。 –

+0

個人的には、私は固定されたシードを持つ乱数を推奨します(もちろん明示的な制限ケースもあります)。そうすれば、大量のデータを簡単にテストし、欠落している可能性のある微妙な問題に直面することができますが、回帰の目的で常に同じテストを繰り返します。 – Kena

0
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 
関連する問題