İpucu

Rulet Çemberi Birim Testi

Rulet Çemberi Seçimi algoritmasi olasılığa dayanan bir algoritma olduğu için birim testini yapmak zor. Örneğin şuradaki algoritmayı test etmek isteyelim : Rulet Çemberi Seçimi Algoritması
Junit 5 ile aşağıdaki gibi bir test yapılabilir :
@RepeatedTest(100)
public void testRouletteWheelSelector() {
	
	int[] values=new int[]{0,100};
	
	int index = RouletteWheelSelector.select(values);
	
	assertEquals(1, index);
			
}
Bu test 100 kere tekrarlandığında hep başarılı olmalıdır. Çünkü ile değer 0 olasılıktır ve hep ikinci seçilecektir.
Olasılıkta örnekler ne kadar fazla ise sonuç olasılık değerlerine yaklaşır. Bir yazı turayı bir milyon kez atarsanız yaklaşık 500 bin kez tura ve yazı gelir. Yüz milyona çıkarırsanız daha da değerler yaklaşır birbirine. Bunu şu şekilde kullanabiliriz :
static int index1Count=0;
static int index2Count=0;
@BeforeAll
public static void init() {
	index1Count=0;
	index2Count=0;
}
@RepeatedTest(10000)
public void testRouletteWheelSelector50Percent() {
	
	int[] values=new int[]{50,50};
	
	int index = RouletteWheelSelector.select(values);
	
	if(index==0) {
		index1Count++;
	}if(index==1) {
		index2Count++;
	}			
}
@AfterAll
public static void beforeAll() {
	
	System.out.println(index1Count+":"+index2Count);
}

Değerler %50 ve %50 verilmesinden dolayı çıkan sonuçlar birbirine yakın olmalıdır. Örneğin 5100 - 4900 gibi değerler çıkacaktır. Yüz bin kez de yapılabilir test. Tabi burada çıkan sonucu insan gözüyle değerlendirdik. Halbuki bir hata payı verip kod ile test etmeliydik.
zafer.teker , 27.08.2021

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir