Bir birim test takımı yazarken, gerçekleştirmeniz gereken testle ilgili olmayan bazı etkinlikler olabilir. Bu faaliyetler herhangi bir biçimde olabilir. Test yapmadan önce bir veritabanına bağlanmanız veya kaynakları toplamanız gerekebilir. Her test senaryosu yürütüldükten sonra bazı kaynakları serbest bırakmanız gerekebilir.

Testle ilgili olmayan bu etkinliklerden herhangi birini birim test sınıfının kapsamı dışında gerçekleştirmek imkansız değilse de sıkıcı olabilir. Test sınıfınızın başarılı bir şekilde yürütülmesi bu faaliyetlere bağlı olabilir, bu nedenle JUnit bu sorunu çözmek için iki çift açıklama sağlar.

@BeforeAll Açıklaması

Bir JUnit test sınıfı, bir veya daha fazla test yöntemine sahip olabilir. @BeforeAll ek açıklaması, belirli bir yöntemin bir test sınıfındaki tüm test yöntemlerinden önce yürütülmesi gerektiğini bildirir. Bu ek açıklamayla ilişkili yöntem, test sınıfındaki test yöntemlerinin sayısından bağımsız olarak yalnızca bir kez (testin başlangıcında) yürütülür.

@BeforeAll ek açıklamasını kullanan herhangi bir yöntem birkaç koşula uymalıdır. Bu yöntemler geçersiz bir dönüş tipine sahip olmalı, genel olmalı ve özel olmamalıdır. @BeforeAll ek açıklaması, bir

instagram viewer
bir veritabanına bağlantı veya yeni bir dosya oluşturma. Bu makale, @BeforeAll ek açıklamasını nasıl kullanabileceğinizi göstermek için bir hesap makinesi test sınıfı kullanır.

Hesap Makinesi Sınıfı

paket com.app;
halka açıksınıfHesap makinesi{
halka açıkstatikintEkle(int sayı1, int sayı2){
dönüş sayı1 + sayı2;
}
halka açıkstatikintçıkarmak(int sayı1, int sayı2){
dönüş sayı1 - sayı2;
}
halka açıkstatikintçarpmak(int sayı1, int sayı2){
dönüş sayı1 * sayı2;
}
halka açıkstatikintbölmek(int sayı1, int sayı2){
dönüş sayı1 / sayı2;
}
}

Hesap MakinesiTest Sınıfı

içe aktarmakstatikkuruluş.junit.Jüpiter.api.İddialar.*;
içe aktarmakkuruluş.junit.Jüpiter.api.Hepsinden önce;
içe aktarmakkuruluş.junit.Jüpiter.api.Ölçek;
içe aktarmakkuruluş.junit.Jüpiter.api.Ekran adı;

@DisplayName("Nasıl yapılacağını gösteren test sınıfı kullanmak en öncekivesonrasında açıklamalar.")
sınıfHesap Makinesi Testi{
@Hepsinden önce
halka açıkstatikgeçersizpowerOnHesap Makinesi(){
System.out.println("hesap makinesi açık");
}

@Ölçek
@Ekran adı("İki tamsayı değeri ekleyen test yöntemi.")
halka açıkgeçersiztestEkle(){
assertEquals(7, Hesap makinesi.Ekle(3, 4));
}

@Ölçek
@Ekran adı("Bir tamsayı değerini diğerinden çıkaran test yöntemi.")
halka açıkgeçersiztestSubtract(){
assertEquals(6, Hesap makinesi.çıkarma(9, 3));
}

@Ölçek
@Ekran adı("İki tamsayı değerini çarpan test yöntemi")
halka açıkgeçersiztestÇarpma(){
assertEquals(10, Hesap makinesi.çarpmak(5, 2));
}

@Ölçek
@Ekran adı("Bir tamsayı değerini diğerine bölen test yöntemi")
halka açıkgeçersiztestBöl(){
assertEquals(2, Hesap makinesi.bölmek(4, 2));
}
}

Bu sınıfta, @BeforeAll notu, herhangi bir test çalıştırmasından önce "Hesap makinesi açık" yazan powerOnCalculator() yöntemiyle çalışır. Başarılı test yürütme, aşağıdaki test raporunu yazdırır:

Gördüğünüz gibi @BeforeAll ek açıklamasıyla ilişkili yöntem test raporunda görünmüyor. Ancak @BeforeAll açıklama yönteminde bir hata varsa, test raporu sonuçları bunu bir başarısızlıkla gösterecektir.

@BeforeEach Açıklaması

@BeforeAll açıklamalı yöntemi gibi, @BeforeEach açıklamalı yöntemi de test raporunda görünmez. @BeforeEach açıklamalı yöntem, bir test sınıfındaki her test yönteminden önce yürütülür. Bu nedenle, bir test sınıfı iki test yöntemi içeriyorsa, @BeforeEach ek açıklaması iki kez yürütülür.

içe aktarmakstatikkuruluş.junit.Jüpiter.api.İddialar.*;
içe aktarmakkuruluş.junit.Jüpiter.api.Hepsinden önce;
içe aktarmakkuruluş.junit.Jüpiter.api.ÖnceHer;
içe aktarmakkuruluş.junit.Jüpiter.api.Ölçek;
@DisplayName("Nasıl yapılacağını gösteren test sınıfı kullanmak en öncekivesonrasında açıklamalar.")
sınıfHesap Makinesi Testi{
@Hepsinden önce
halka açıkstatikgeçersizpowerOnHesap Makinesi(){
System.out.println("hesap makinesi açık");
}
@BeforeEach
halka açıkgeçersiztemizleHesap makinesi(){
System.out.println("Hesap makinesi hazır");
}
@Ölçek
@Ekran adı("İki tamsayı değeri ekleyen test yöntemi.")
halka açıkgeçersiztestEkle(){
assertEquals(7, Hesap makinesi.Ekle(3, 4));
}
@Ölçek
@Ekran adı("Bir tamsayı değerini diğerinden çıkaran test yöntemi.")
halka açıkgeçersiztestSubtract(){
assertEquals(6, Hesap makinesi.çıkarma(9, 3));
}
@Ölçek
@Ekran adı("İki tamsayı değerini çarpan test yöntemi")
halka açıkgeçersiztestÇarpma(){
assertEquals(10, Hesap makinesi.çarpmak(5, 2));
}
@Ölçek
@Ekran adı("Bir tamsayı değerini diğerine bölen test yöntemi")
halka açıkgeçersiztestBöl(){
assertEquals(2, Hesap makinesi.bölmek(4, 2));
}
}

CalculatorTest sınıfına @BeforeEach notunun eklenmesi aşağıdaki çıktıyı üretir:

@BeforeEach notuyla ilişkili yöntem, her test yönteminden önce bir kez olmak üzere dört kez yürütülür. @BeforeEach yönteminin statik olmadığını, geçersiz bir dönüş türüne sahip olduğunu ve bunlar zorunlu koşullar olduğundan özel olmadığını unutmayın. @BeforeEach ek açıklamasıyla ilişkili yöntemin @BeforeAll yönteminden sonra çalıştığını da belirtmek önemlidir.

@AfterAll Açıklaması

@AfterAll Annotation içeren bir yöntem, test sınıfındaki tüm test yöntemleri yürütmelerini tamamladıktan sonra yürütülür. @AfterAll ek açıklaması aşağıdakiler için idealdir: temel dosya işlemleri, bir dosyayı kapatmak veya bir veritabanından bağlantıyı kesmek gibi. @AfterAll ek açıklaması, @BeforeAll ek açıklamasının karşılığıdır. @BeforeAll ek açıklaması gibi, @AfterAll ek açıklaması statik olmalı, void döndürmeli ve çoğu özel olmamalıdır.

@Nihayet
halka açıkstatikgeçersizpowerOffHesap makinesi(){
System.out.println("hesap makinesi kapalı");
}

@AfterAll açıklamalı yöntemi mevcut CalculatorTest sınıfına eklemek, konsola aşağıdaki çıktıyı yazdırır:

@AfterAll ek açıklamasını kullanan powerOffCalculator() yönteminin, tüm test yöntemleri yürütüldükten sonra test sınıfının sonunda yazdırıldığını unutmayın.

@AfterEach Açıklaması

@AfterEach notu, @BeforeEach notunun karşılığıdır. @BeforeAll ve @AfterAll ek açıklamalarından biraz farklı olan aynı zorunlu koşullara sahiptirler. @AfterEach ek açıklamasını @BeforeEach ek açıklamasından (adları dışında) ayıran şey, @AfterEach yönteminin her test yönteminden sonra çalışmasıdır.

@Her birinden sonra
halka açıkgeçersizdönüşSonuçları(){
System.out.println("sonuçlar hazır");
}

CalculatorTest sınıfının yürütülmesi konsola aşağıdaki çıktıyı yazdırır:

Çıktı, @AfterEach ek açıklamasıyla (returnResults) ilişkili yöntemin dört kez yazdırdığını gösterir. returnResults() yönteminin her yürütmesi, yalnızca her birim testinin yürütülmesinden sonra gerçekleşir. Bu, @BeforeEach ek açıklamasıyla ilişkili yöntemden gelen her çıktıdan sonra returnResults() yöntemi çıktısının görünmesi gerçeğiyle açıkça görülür.

Ek Açıklamaları Kullanarak Test Takımlarınızı Parlatın

JUnit, önce ve sonra çift açıklamalarını kullanarak testle ilgili olmayan işlemleri gerçekleştirmenize olanak tanır. Bu dört açıklama, testlerinize değer katan diğer birkaç açıklama listesine aittir. JUnit'in ek açıklamalarından bir diğeri @DisplayName'dir.

Tam CalculatorTest sınıfını görüntüleyen iki kod örneği, @DisplayName ek açıklamasını kullanır. @DisplayName ek açıklaması, test sınıflarınız ve test yöntemleriniz için daha anlamlı adlar oluşturmanıza yardımcı olur.