我正在尝试使用NUnit在测试期间生成一个随机数,但它会一直生成相同的数字。我正在使用以下功能。
dim dCount As Integer = Math.Floor((High - Low + 1) * Rnd() + Low)
dim divName As String = "abc" & dCount
知道为什么会这样做吗?
此致
萨姆
答案 0 :(得分:1)
据推测,您正在快速连续执行许多测试。我不确切知道Rnd()
在VB中的作用,但听起来它有典型的“每次呼叫新RNG”问题。
创建Random
的单个实例并重复使用它。请注意,您的数学可以用简单的替换:
dim dCount as Integer = myRandom.Next(Low, High+1)
一个警告 - Random
不是线程安全的。如果您需要从不同的线程生成随机数,either use locking or thread statics。
另一方面:使用随机数会使您的单元测试不确定。你确定你需要吗?有时它是合适的,但不经常是IME。
答案 1 :(得分: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