Günümüz yazılım dünyasında yazılım geliştirmek kadar geliştirilen yazılımların testleri de büyük önem taşıyor. Gerek manuel testler ile gerekse de otomatize edilmiş testler ile yazılımların test edilmesi sağlanıyor. Yazılımların otomatize test koşumlarında kullanılan JUnit kütüphanesi artık yoluna 2006 yılında çıkan 4. versiyonu yerine 2017 yılında çıkan 5. versiyonu ile devam etmekte. Aradan geçen uzun zaman diliminde JUnit 5’te 4’e göre önemli değişiklikler mevcut.
JUnit ve test kavramları ile ilgili daha detaylı bilgiye şuradan erişebilirsiniz.
Bu yazımızda Junit 4 ile testlerin koşulduğu bir projede JUnit 5’e geçiş için nelerin yapılması gerektiğini aşağıdaki şekilde 5 maddede özetleyebiliriz.
1. Expected ve Timeout Özelliklerindeki Değişiklikler:
JUnit4 içerisinde fırlatılması beklenen bir hata tipini expected özelliği @Test
2. Annotation’ına aşağıdaki gibi bildirebiliyorduk:
@Test(expected=MyCustomException.class)
public void exceptionExpectedTestMehod() throws MyCustomException {
//…. Test method body
}
Junit 5 ile birlikte bu expected özelliği kaldırıldı ve artık biz assertThrows’a geçiş yapabiliriz. Örneğin şöyle:
public void exceptionExpectedTestMethod() throws MyCustomExeption {
Assertions.assertThrows(Exception.class, () -> {
//…
});
}
JUnit 4 ile test metotlarımızda timeout özelliğini şu şekilde kullanabiliyorduk.
@Test(timeout=1)
public void timeoutExpectedTestMethod() throws InterruptedException {
Thread.sleep(10);
}
Junit 5 ile birlikte timeout özelliği yerine assertTimeout metodunu kullanabilmekteyiz.
@Testpublic void timeoutExpectedTestMethod() throws InterruptedException {
Assertions.assertTimeout(Duration.ofMilis(1), () -> Thread.sleep(10));
}
3. Değişen Annotation’larındaki Değişiklikler
JUnit 5 ile birlikte aşağıdaki annotation’lar yerlerini yenilerine bıraktılar:
@Before annotation’ı artık @BeforeEach olarak kullanılacak.
@After annotation’ı artık @AfterEach olarak kullanılacak.
@BeforeClass annotation’ı artık @BeforeAll olarak kullanılacak.
@AfterClass annotation’ı artık @AfterAll olarak kullanılacak.
@Ignore annotation’ı artık @Disabled olarak kullanılacak.
4. Yeni Gelen Annotation’lar:
JUnit 4’de mevcut test context’ini başka bir framework ile entegre etmek için @RunWith annotation’ı kullanabiliyorduk. JUnit 5 ile birlikte benzer işi yapan @ExtendWith annotation’ı geldi. Örneğin JUnit 4 ve Spring Test’i bir arada kullanırken şöyle yapıyorduk:
@RunWith(SpringJUnit4ClassRunner.class)
JUnit 5 ile artık şöyle yapabiliriz:
@ExtendWith(SpringExtension.class)
5. Yeni Test Rule Annotation’ları:
Junit 4 içerisinde @Rule annotation’ı ile bir rule belirleyip onu koşturabiliyorduk. Örneğin Junit 4 içerisinde bir Test Rule yazımı ve kullanımı şu şekilde yapılabiliyordu:
public class MyTestRule implements TestRule {
@Override public Statement apply(Statement base, Description description) {
return new Statement() {
@Override public void evaluate() throws Throwable {
System.out.println(“Evaluate Method Is Working!”);
}
};
}
}
Yukarıda oluşturduğumuz rule’u test sınıfı içerisinde şu şekilde tanımlayıp kullanabiliyoruz.
@Rule
public MyTestRule myTestRule = new MyTestRule();
JUnit 5 içerisinde ise rule yazımı ve kullanımı biraz daha kolaylaştı. Aslında ismi de Rule’dan ziyade Extension olarak geçmeye başladı. Extension tanımımızı şöyle yapabiliyoruz.
public class MyExtension implements AfterEachCallback, BeforeEachCallbak {
@Override public void beforeEach(TestExtensionContext context) throws Exception {
//İş yapacak kısım
}
@Override public void beforeEach(TestExtensionContext context) throws Exception {
//İş Yapacak Kısım
}
}
Ardından bu extension tanımını test metotlarını koşturacağımız sınıfımızı @ExtendWith notasyonu ile işaretleyerek direkt kullanabiliyoruz.
@ExtendWith(MyExtension.class)
public class RuleExampleUnitTest {
//Test Metotlarımız!
}
KAYNAKÇA:
- https://www.baeldung.com/junit-5-migration (Son erişim tarihi: 23.05.2023)
- https://www.arhohuttunen.com/junit-5-migration/ (Son erişim tarihi: 23.05.2023)
- https://medium.com/@wenqiglantz/junit-migration-guide-from-junit-4-to-junit-5-95b5700431a6 (Son erişim tarihi: 23.05.2023)
- https://docs.openrewrite.org/running-recipes/popular-recipe-guides/migrate-from-junit-4-to-junit-5 (Son erişim tarihi: 23.05.2023)