Birim testinin amacı, bir uygulamadaki hataları mümkün olan en kısa sürede belirlemektir. Birden fazla kanal sizi aynı hedefe götürebilse de, en verimli rotayı kullanmayı hedeflemelisiniz.
Bir JUnit test paketi, aynı verilere ihtiyaç duyan birkaç test sınıfına sahip olabilir, ancak test verilerini yeniden kullanamazsınız. JUnit'in önceki sürümlerinde, bir yardımcı yöntem oluşturmak ve ardından bir test sınıfının verilerine her ihtiyaç duyduğunda bu yöntemi çağırmak iyi bir yaklaşımdı.
JUnit 5, bu soruna daha verimli bir yaklaşım sağlar: bağımlılık enjeksiyonu (DI).
Bağımlılık Enjeksiyonu Nedir?
DI, bir nesnenin başka bir nesnenin bağımlılıklarını sağladığı bir tasarım desenidir. Bir Java uygulaması oluştururken, işlevini yerine getirmek için başka bir sınıfın oluşturduğu bir nesneye bağlı olan bir sınıfınız olabilir.
Bağımlılık enjeksiyonundan önce, farklı bir sınıftan bir nesneyi kullanmak için, o nesnenin ona bağlı olan sınıf içinde yeni bir örneğini oluşturmanız gerekir. Bu nedenle, aynı nesneye bağlı birkaç sınıfınız varsa, bağımlı sınıflar içinde bunun birkaç örneğini oluşturmanız gerekir.
DI, bağımlı bir sınıftaki bir nesneyi, o sınıfta onun yeni bir örneğini oluşturmadan kullanmanıza izin verir.
JUnit 5'te Bağımlılık Enjeksiyonu
JUnit 5, hem test yöntemlerinde hem de yapıcılarda bağımlılıkları enjekte etmenize izin verir. Bu, çerçevenin önceki sürümleri test yöntemlerinin veya yapıcıların parametrelere sahip olmasına izin vermediğinden önemlidir.
JUnit 5, istediğiniz kadar çok parametre enjekte etmenize izin verir. Tek yakalama, ParameterResolver API'nin çalışma zamanında her parametreyi çözebilmesi gerektiğidir. JUnit şu anda otomatik olarak kullandığı üç yerleşik parametre çözümleyiciye sahiptir. Başka herhangi bir çözümleyici kullanmak için, @ExtendWith ek açıklamasını kullanarak açıkça kaydetmeniz gerekir.
JUnit'te Bağımlılıkları Enjeksiyon
Bu örnek program, JUnit'in yerleşik parametrelerinden birini (TestInfoParameterResolver) kullanarak bir bağımlılığa nasıl bir bağımlılık enjekte edebileceğinizi gösterir. JUnit 5 testi. TestInfoParameterResolver, TestInfo arabirimine ait nesneleri çözümler. Bu nedenle, JUnit 5, onu kullanan herhangi bir yönteme veya yapıcıya TestInfo arayüzünün bir örneğini sağlayacaktır.
içe aktarmakstatik org.junit.jüpiter.api. İddialar.*;
içe aktarmak org.junit.jüpiter.api. Ekran adı;
içe aktarmak org.junit.jüpiter.api. Ölçek;
içe aktarmak org.junit.jüpiter.api. TestBilgisi;sınıfBilgi TestiArayüz Testi{
// InfoTestInterfaceTest yapıcısına bir testInfo nesnesi enjekte ediyoruz
InfoTestInterfaceTest (TestInfo testInfo) {
iddiaEquals("InfoTestInterfaceTest", testInfo.getDisplayName());
}// Bir testInfo nesnesini yöntemlere enjekte etmek
@Ölçek
geçersiztestMetodAdı(TestBilgisi testBilgisi){
iddiaEquals("testMethodName (TestInfo)", testInfo.getDisplayName());
}
@Ölçek
@Ekran adı("kullanılan yöntem @Ekran adı dipnot")
geçersiztestMethodNameTwo(TestBilgisi testBilgisi){
iddiaEquals("yöntemi kullanan @Ekran adı açıklama", testInfo.getDisplayName());
}
}
Yukarıdaki JUnit testi, bir nesnenin bir yapıcıya nasıl enjekte edileceğini ve iki yöntemi gösterir. bu JUnit Test Bilgisi arayüzün nesnesiyle kullanabileceğiniz dört yöntemi vardır.
getDisplayName() yöntemi en kullanışlı olanıdır. Geçerli test yönteminin veya oluşturucunun görünen adını döndürür. Varsayılan olarak, bu ad sınıfa bağlıdır. Ama eğer kullanırsan @DisplayName notu, getDisplayName() yöntemi bunun yerine bu metni döndürür.
Yukarıdaki test sınıfı aşağıdaki test raporunu oluşturur:
DI'yi @Before ve @After Yöntemlerinde kullanın
Bağımlılıkları destekleyen dört başka JUnit açıklamalı yöntem türü vardır. Bunlar @BeforeAll, @BeforeEach, @AfterAll ve @AfterEach ek açıklamalarıdır. @Test yöntemi gibi, yapmanız gereken tek şey, önceki veya sonraki yöntemlerden herhangi birine bir parametre olarak bir nesne iletmektir ve hazırsınız.
@Before ve @After ek açıklamaları, daha verimli test kodu geliştirmenize de yardımcı oldukları için önemlidir. Bu yöntemlere bağımlılıklar ekleme yeteneğine sahip olmak, test kodunuzu daha da geliştirecektir.