JUnit Parameterized, bir test sınıfında verilen farklı parametrelerle test metotları çalıştırılır. Tanımladığımız parametreler sayesinde test metotlarını farklı değerler ile tekrar çalıştırmış oluruz. Bu yöntem ile aynı test metotlarını farklı değerler için oluşturmamızın önüne geçmiş oluruz.
1 2 3 4 5 6 7 |
public class Hesapla { public static int carpma(int sayi1, int sayi2){ return sayi1*sayi2; } } |
Yukarıda Hesapla isimli sınıfa carpma adında static bir metot oluşturarak verilen 2 parametrenin sonuçlarını döndürüyoruz. Aşağıda ise parametreli test sınıfımızı oluşturduk.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
@RunWith(value = Parameterized.class) public class HesaplaTest { int s1; int s2; int expected; public HesaplaTest(int s1, int s2, int expected) { this.s1 = s1; this.s2 = s2; this.expected = expected; } @Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { {1, 2, 2}, {0, 0, 0}, {6, 6, 36}, {7, 8, 56}, }); } @Test public void testCarpma(){ System.out.println("testCarpma() için test başladı...!"); assertEquals(expected, Hesapla.carpma(s1, s2)); System.out.println(s1 + " * " + s2 + " = " + expected); System.out.println("testCarpma() için test bitti...!\n"); } } |
@RunWith(value = Parameterized.class) ile test sınıfının parametreli bir sınıf olacağını tanımlıyoruz. Bu özelliği kullanacağımız zaman bu zorunludur. HesaplaTest isimli sınıfımızın yapıcı metodu s1, s2 ve expected adında 3 parametre almaktadır. Bu parametreleri yukarıda yer alan değişkenlerimize gönderiyoruz. @Parameters notasyonlu, data isminde static bir metot oluşturuyoruz. Bu metot içersinde test metotlarımızda kullanacağımız test verilerimizi tanımlıyoruz. Metot içersinde 4 satır 3 sütunluk verileri tanımlıyoruz. Bu verilerin sırası yapıcı metodumuzun sırasıyla aynı olmalıdır. Örneğin, 0.indiste yer alan 1 sayısı s1, 2 sayısı s2 ve diğer 2 sayısı expected değişkenlerini işaret etmektedir.
testCarpma isminde metodumuzda yukarıda ki s1,s2 ve expected değişkenlerimizi ilgili yerlerde kullanıyoruz. Testin yaptığı kıyaslamalar doğrı olması durumunda expected değişken değerlerini ekrana yazdırıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
testCarpma() için test başladı...! 1 * 2 = 2 testCarpma() için test bitti...! testCarpma() için test başladı...! 0 * 0 = 0 testCarpma() için test bitti...! testCarpma() için test başladı...! 6 * 6 = 36 testCarpma() için test bitti...! testCarpma() için test başladı...! 7 * 8 = 56 testCarpma() için test bitti...! |
data static metodunda verdiğimiz her değeri sırasıyla test metodumuzda denediğini, ekran çıktısından rahatlıkla anlayabiliyoruz. Her yeni değer için aynı test metodu tekrardan başlıyor.
Aşağıda ki aynı örnekte parametreleri yapıcı metot(constructor) olmadan almaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@RunWith(value = Parameterized.class) public class HesaplaTest { @Parameter(value=0) public int s1; @Parameter(value=1) public int s2; @Parameter(value=2) public int expected; @Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { {1, 2, 2}, {0, 0, 0}, {6, 6, 36}, {7, 8, 56}, }); } @Test public void testCarpma(){ System.out.println("testCarpma() için test başladı...!"); assertEquals(expected, Hesapla.carpma(s1, s2)); System.out.println(s1 + " * " + s2 + " = " + expected); System.out.println("testCarpma() için test bitti...!\n"); } } |
Yapıcı metot kaldırılmış yerine parametre olarak kullandığımız değişkenlere @Parameter notasyonu tanımlanmıştır. value ile parametrelerin sırası belirlenmiş olup bu sıralama 0 sayısından başlamak zorunludur. Testi çalıştırıp aşağıda ki ekran çıktısına baktığımızda sonuçların değişmediğini görmekteyiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
testCarpma() için test başladı...! 1 * 2 = 2 testCarpma() için test bitti...! testCarpma() için test başladı...! 0 * 0 = 0 testCarpma() için test bitti...! testCarpma() için test başladı...! 6 * 6 = 36 testCarpma() için test bitti...! testCarpma() için test başladı...! 7 * 8 = 56 testCarpma() için test bitti...! |