Daha önceki iki JUnit yazımın ilkinde basit bir test sınıfı, ikincisinde ise birkaç test sınıfını bir arada çalıştıracak bir suite yapısını görmüştük. Şimdi ise sıra geldi bir testin farklı parametrelerle ardışık ve otomatik olarak JUnit tarafından çağrılmasına. Yani elimizde var olan parametre seti için tek tek test caseler tanımlamak yerine bunu otomatik hale getirip, bu işi bizim için JUnit’ in yapmasını istiyoruz. Hemen örnek kodumuza bakalım.

package com.farukbozan.jfr.junit;import java.util.ArrayList;
import java.util.Collection;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)
public class ParameterTest {

private static Parameter instance = null;
private int expected = 0;
private int value1 = 0;
private int value2 = 0;

public ParameterTest(int expected, int value1, int value2) {
this.expected = expected;
this.value1 = value1;
this.value2 = value2;
}

@Parameters
public static Collection<Integer[]> getTestParameters() {
ArrayList<Integer[]> list = new ArrayList<>();
list.add(new Integer[]{3, 2, 1});
list.add(new Integer[]{5, 2, 3});
list.add(new Integer[]{10, 6, 1});
return list;
}

@BeforeClass
public static void setUpClass() {
instance = new Parameter();
}

@AfterClass
public static void tearDownClass() {
instance = null;
}

@Before
public void setUp() {
}

@After
public void tearDown() {
}

@Test
public void testAdd() {
int result = instance.add(value1, value2);
assertEquals(expected, result);
}

}

 

Her zaman olduğu gibi detaylara girelim. Öncelikle basit bir add metodu testi yapıyoruz ve elimizde üç tane parametre seti var. Amacımız her bir parametre seti için tek tek test çalıştırmak.

@RunWith(Parameterized.class)

belirteci önemli; çünkü bu test sınıfının parametrik olarak çalıştırılacak bir sınıf olduğunu belirtiyor. Kullanacağımız değişkenleri sınıf değişkeni olarak tanımlıyoruz.

@Parameters

belirteci ise test için kullanılacak parametre setinin döndürecek metodu belirtiyor. Böylece JUnit bu Collection’ dan dönen her set için, test çalıştıracaktır. Dikkat edilmesi gereken nokta setteki parametre sayısı ve tipi ile constructor üzerindeki parametre sayısı ve tipi aynı olmalıdır. Sonuç olarak baktığınızda ise iki test case başarılı bir tanesi ise başarısız olacaktır.

Bol Java’ lı günler dileğiyle… 😀

Categories:

No responses yet

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.