2009-02-26 15 views
0

NUnit kullanarak test sırasında rasgele bir sayı oluşturmaya çalışıyorum, ancak aynı sayıyı oluşturmaya devam ediyor. Bu amaç için aşağıdaki işlevi kullanıyorum.Test sırasında çalıştırılan aynı rastgele sayı Fikstür ayarı

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

Bunu neden yaptığına dair bir fikriniz var mı?

Selamlar,

Sam

+0

Kullanım 4, rasgele olmayı garanti eder; artı sizin için test edebileceksiniz. – garrow

cevap

1

Tahminen, hızlı bir şekilde birçok test yürütme ediyoruz. VB'de Rnd()'un ne yaptığını tam olarak bilmiyorum, ancak tipik "çağrı başına yeni RNG" sorunu var gibi geliyor.

Tek bir örnek Random oluşturun ve bunu art arda kullanın. senin matematik bir basit ile değiştirilebilir unutmayın:

dim dCount as Integer = myRandom.Next(Low, High+1) 

bir uyarı - Random evreli değil. Farklı iş parçacıklarından rasgele sayılar oluşturmanız gerekiyorsa, either use locking or thread statics.

Başka bir noktada: rasgele sayılar kullanarak birim testlerinizi deterministik yapmaz. Yapman gerektiğine emin misin? Bazen uygun, ancak çoğu zaman IME değil.

+0

Rnd(), 0 <= r <1 ... aralığında tek bir değer döndürür ve birim testlerinizde rastgele oluşturulmuş veriler kullanmamaya gerek duyarım. Beklenen aralığın içinde ve dışında açıkça test etmek için çok daha iyi. –

+0

Şahsen, sabit bir tohumla rastgele sayıları öneririm (tabii ki + sınırlı limitli durumlar). Böylelikle, geniş bir veri dizisini kolayca test edebilir ve kaçırmış olabileceğiniz ince problemlerle karşılaşabilirsiniz, ancak yine de her zaman aynı testi regresyon amacıyla tekrarlayın. – 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 
İlgili konular