JUnit temel notasyolar bizim test sürecimizde olmazsa olmazlarımızdan biridir. Bu notasyonlara sık sık başvururuz.
@BeforeClass ve @AfterClass
BeforeClass notasyonu, tüm testler öncesi yapılması gereken işlemlerde kullanılır. Örneğin test metotlarımız çalışmadan önce veritabanı bağlantısının yapılması gerekiyorsa bu notasyonun kullanıldığı bir metot oluşturmamız gerekmektedir.
AfterClass notasyonu, tüm testler tamamlandıktan sonra yapılması gereken işlemlerde kullanılır. Örneğin @BeforeClass notasyonu ile açtığımız veritabanı bağlantısını @AfterClass notasyonlu bir metot içersinde sonlandırabiliriz. Her iki metodunda oluşturulurken public static void olarak tanımlanması gerektiğini bilmemiz gerekmektedir. Temel olarak bu metotların oluşturulması aşağıda ki gibidir.
1 2 3 4 5 6 7 8 9 |
@BeforeClass public static void tumTestlerdenOnceCalistir(){ System.out.println("@BeforeCLass- Tüm test metotlarından önce çalışır."); } @AfterClass public static void tumTestlerdenSonraCalistir(){ System.out.println("@AfterClass - Tüm test metotlarından sonra çalışır"); } |
@Before ve @After
Before notasyonu, her test metodundan önce çalışır. Örneğin nesnelerimizin test süresince kullanacağı değerleri bu notasyonun bulunduğu metotlarda tanımlayabiliriz. After notasyonu, her test metodundan sonra çalışmaktadır. Örneğin @Before notasyonunda tanımladığımız değerleri @After notasyonunda null değer vererek tüm değerleri boşaltabiliriz. @BeforeClass ve @AfterClass notasyonları test sürecinde bir kere çalışırken, @Before ve @After notasyonları her test metodunun başında ve sonunda çalışmaktadır. Temel olarak bu notasyonlara bağlı metotların oluşturulması aşağıda ki gibidir.
1 2 3 4 5 6 7 8 9 |
@Before public void testMetodundanOnceCalistir(){ System.out.println("@Before - Her test metodundan önce çalışır."); } @After public void testMetodundanSonraCalistir(){ System.out.println("@After - Her test metodundan sonra çalışır."); } |
@Test ve @Ignore
Yazdığımız her test metodunun başına @Test notasyonu eklememiz gerekmektedir. Bu notasyonu eklemezsek metot test sırasında çalışıtırılmaz. Yazdığımız bazı test metotları henüz tamamlanmamış veya değişiklikleri uğrayabileceğinden dolayı test sırasında çalıştırılmasını istemiyorsak @Ignore notasyonu eklemeiz yeterlidir. Bu notasyonun tanımlı olduğu metotlar test sırasında çalıştırılmayacaktır. Ayrıca istenilirse @Ignore(“açıklama”) şeklinde yazılarak metodun neden test edilmesini istemediğimizide yazabiliriz. Aşağıda örnek bir yazımı görebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
@Test public void testHesaplaUcgeninAlani(){ System.out.println("Start testHesaplaUcgeninAlani()... "); Hesaplama hesapla = new Hesaplama(); int sonuc=(int) hesapla.hesaplaUcgenAlani(3, 2); Assert.assertEquals(sonuc, 3); System.out.println("Sonuç: " + sonuc); System.out.println("End testHesaplaUcgeninAlani()..."); } @Ignore public void testHesaplaUcgeninAlaniOndalikliSonuc(){ System.out.println("Start testHesaplaUcgeninAlaniOndalikliSonuc()... "); Hesaplama hesapla = new Hesaplama(); double sonuc=hesapla.hesaplaUcgenAlani(3, 3); Assert.assertEquals(sonuc, 4.5); System.out.println("Sonuç: " + sonuc); System.out.println("End testHesaplaUcgeninAlaniOndalikliSonuc()..."); } |
JUnit sırasında ihtiyaç duyduğumuz temel notasyonları(annotations) yukarıda tanımlarını yaptık. Şimdi tüm örneklerimizi çalıştırarak ekran sonuçlarına göz atalım.
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 33 34 35 36 37 38 39 40 41 42 |
public class HesaplamaTest { @BeforeClass public static void tumTestlerdenOnceCalistir(){ System.out.println("@BeforeCLass- Tüm test metotlarından önce çalışır."); } @AfterClass public static void tumTestlerdenSonraCalistir(){ System.out.println("@AfterClass - Tüm test metotlarından sonra çalışır"); } @Before public void testMetodundanOnceCalistir(){ System.out.println("@Before - Her test metodundan önce çalışır."); } @After public void testMetodundanSonraCalistir(){ System.out.println("@After - Her test metodundan sonra çalışır."); } @Test public void testHesaplaUcgeninAlani(){ System.out.println("Start testHesaplaUcgeninAlani()... "); Hesaplama hesapla = new Hesaplama(); int sonuc=(int) hesapla.hesaplaUcgenAlani(3, 2); Assert.assertEquals(sonuc, 3); System.out.println("Sonuç: " + sonuc); System.out.println("End testHesaplaUcgeninAlani()..."); } @Ignore public void testHesaplaUcgeninAlaniOndalikliSonuc(){ System.out.println("Start testHesaplaUcgeninAlaniOndalikliSonuc()... "); Hesaplama hesapla = new Hesaplama(); double sonuc=hesapla.hesaplaUcgenAlani(3, 3); Assert.assertEquals(sonuc, 4.5); System.out.println("Sonuç: " + sonuc); System.out.println("End testHesaplaUcgeninAlaniOndalikliSonuc()..."); } } |
1 2 3 4 5 6 7 |
@BeforeCLass- Tüm test metotlarından önce çalışır. @Before - Her test metodundan önce çalışır. Start testHesaplaUcgeninAlani()... Sonuç: 3 End testHesaplaUcgeninAlani()... @After - Her test metodundan sonra çalışır. @AfterClass - Tüm test metotlarından sonra çalışır |
Ekran çıktısına bakarak metotların çalışma sıralarını inceyelim. İlk olarak @BeforeClass çalışarak tüm metotlar için gerekli altyapıyı hazırlıyor. Daha sonra @Before çalışarak her metot öncesi gerekli olan alt yapıyı hazırlıyor. Daha sonra @Test çalışarak ilgili metodun test edilmesini ve sonrasında @After ile metot sonrası işlemlerin çalıştırılmasına devam ediyor. Yukarıda @Ignore notasyonunu kullandığımız için diğer test metodumuz ekran çıktısı vermiyor ve @AfterClass ile tüm işlemler sonlandırılıyor. Eğer @Ignore kullanmasaydık ekran çıktısı aşağıda ki gibi olacaktı.
1 2 3 4 5 6 7 8 9 10 11 12 |
@BeforeCLass- Tüm test metotlarından önce çalışır. @Before - Her test metodundan önce çalışır. Start testHesaplaUcgeninAlaniOndalikliSonuc()... Sonuç: 4.5 End testHesaplaUcgeninAlaniOndalikliSonuc()... @After - Her test metodundan sonra çalışır. @Before - Her test metodundan önce çalışır. Start testHesaplaUcgeninAlani()... Sonuç: 3 End testHesaplaUcgeninAlani()... @After - Her test metodundan sonra çalışır. @AfterClass - Tüm test metotlarından sonra çalışır |
@Ignore notasyonu yerine @Test notasyonunu kullandığımız için diğer test metodumuz çalıştı. Bu metot çalışmadan önce yeniden @Before tanımlı notasyon sonrasında @After tanımlı notasyon çalışarak işlemlere devam etti.