JUnit Örnekle Ek Açıklamalar Eğitimi: @Test ve @After Nedir?
⚡ Akıllı Özet
JUnit Ek açıklamalar, metne eklenen bir tür sözdizimsel meta veridir. Java Test çalıştırıcısının hangi yöntemleri yürüteceğini, ne zaman çalıştıracağını ve her birinin ne kadar süreceğini bilmesi için kaynak kod.

Nedir? JUnit Ek açıklamalar?
JUnit ek açıklamalar Bunlar, eklenebilen özel bir sözdizimsel meta veri biçimidir. Java Daha iyi kod okunabilirliği ve yapısı için kaynak kodu. Değişkenler, parametreler, paketler, yöntemler ve sınıflar açıklanabilir. Açıklamalar JUnit 4, bu da yapar Java Kodu daha okunabilir ve basit hale getiriyor. Aradaki en büyük fark bu. JUnit 3 ve JUnit 4: JUnit 4 açıklama tabanlıdır.
Bu ek açıklamalar hakkında temel bilgiye sahip olan biri, kolayca öğrenip uygulayabilir. JUnit Ölçek. Aşağıda önemli ve sık kullanılanlar yer almaktadır JUnit ek açıklamalar listesi ile JUnit Her birinin yanında 5 (Jüpiter) eşdeğeri bulunmaktadır:
| S.No. | Açıklamalar | Açıklama | JUnit 5 eşdeğer |
|---|---|---|---|
| 1. | @Ölçek | Bu açıklama, `junit.framework.TestCase`'in yerine geçer ve eklendiği genel void metodun bir test durumu olarak çalıştırılabileceğini gösterir. | @Test (org.junit.jupiter.api) |
| 2. | @Önce | Bu ek açıklama, her test senaryosundan önce önkoşullar gibi bazı ifadeleri yürütmek istiyorsanız kullanılır. | @BeforeEach |
| 3. | @Dersten önce | Bu açıklama, tüm test senaryolarından önce bazı ifadeleri çalıştırmak istediğinizde kullanılır; örneğin, tüm test senaryolarından önce açılması gereken bir test bağlantısı gibi. | @BeforeAll |
| 4. | @Sonrasında | Her bir ifadeden sonra bazı ifadeleri yürütmek istiyorsanız bu açıklama kullanılabilir. Test DurumuÖrneğin, değişkenleri sıfırlamak veya geçici dosyaları silmek gibi. | @Her birinden sonra |
| 5. | @Dersten sonra | Bu açıklama, tüm test senaryoları tamamlandıktan sonra bazı ifadeleri çalıştırmak istediğinizde kullanılabilir; örneğin, tüm test senaryoları çalıştırıldıktan sonra kaynakları serbest bırakmak gibi. | @Nihayet |
| 6. | @Görmezden gelmek | Bu açıklama, test yürütme sırasında bazı ifadeleri yok saymak istediğinizde, örneğin test yürütme sırasında bazı test durumlarını devre dışı bırakmak istediğinizde kullanılabilir. | @Engelli |
| 7. | @Test(zaman aşımı=500) | Bu açıklama, örneğin bir SLA (hizmet seviyesi anlaşması) kapsamında çalışıyorsanız ve testlerin belirli bir süre içinde tamamlanması gerekiyorsa, test yürütme sırasında bir zaman aşımı belirlemek istediğinizde kullanılabilir. | @Timeout veya assertTimeout |
| 8. | @Test(beklenen=IllegalArgumentException.class) | Bu açıklama, test yürütme sırasında bazı istisnaları ele almak istediğinizde kullanılabilir. Örneğin, belirli bir yöntemin belirtilen bir istisnayı fırlatıp fırlatmadığını kontrol etmek istiyorsanız. | assertTrows |
JUnit Ek Açıklamalar Örneği
Önemli konuları kapsayan bir sınıf oluşturalım JUnit basit print ifadeleriyle ek açıklamalar ekleyin ve bunu bir test çalıştırıcısı sınıfıyla yürütün:
) 1 Adım Aşağıdakileri dikkate alın. Java Yukarıda listelenen ek açıklamalara bağlı çeşitli yöntemlere sahip sınıf:
JunitAçıklamalarıÖrnek.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
) 2 Adım Yukarıdaki testi çalıştırmak için bir test çalıştırıcı sınıfı oluşturalım:
TestRunner.java
package guru99.junit; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(JunitAnnotationsExample.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Beklenen Sonuç
- Tüm test senaryoları tek tek yürütülecek ve tüm yazdırma ifadeleri konsolda görülebilecek.
- Yukarıdaki tabloda tartışıldığı gibi, @Before ve @BeforeClass JUnit [ m2() ve m1() yöntemleri sırasıyla her test senaryosundan önce ve tüm test senaryolarından önce çalıştırılacaktır.
- Aynı şekilde @After ve @AfterClass'ta da durum böyledir. JUnit (m4() ve m3() metotları sırasıyla her test senaryosundan sonra ve tüm test senaryolarından sonra çalıştırılacaktır. @Ignore (m6() metodu) testi yok saymak olarak değerlendirilecektir.
Yukarıda kullanılan test senaryolarını inceleyelim. Java ayrıntılı olarak sınıf:
- Aşağıda verilen m5() yöntemini inceleyin:
@Test
public void m5() {
list.add("test");
assertFalse(list.isEmpty());
assertEquals(1, list.size());
}
Yukarıdaki yöntemde, "liste" değişkenine bir dize ekliyorsunuz:
- liste boş() false değerini döndürecektir.
- iddiaFalse(list.isEmpty()) doğruya dönmelidir.
- Sonuç olarak, test senaryosu geçmek.
Listeye yalnızca bir dize eklediğiniz için boyutu birdir.
- liste.size() "1" tamsayı değerini döndürmelidir.
- So iddiaEquals(1, liste.size()) doğruya dönmelidir.
- Sonuç olarak, test senaryosu geçmek.
- Aşağıda verilen m7() yöntemini inceleyin:
@Test(timeout = 10)
public void m7() {
System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case");
}
Yukarıda tartışıldığı gibi, @Test(zaman aşımı = 10) Bu, test senaryosunda zaman aşımını zorlamak için kullanılır. Değer milisaniye cinsindendir, bu nedenle m7() 10 milisaniye içinde tamamlanmalıdır.
- Aşağıda verilen m8() yöntemini inceleyin:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Yukarıda tartışıldığı gibi, @Test(beklenen) Belirtilen istisna, yürütülmesi sırasında kontrol edilecektir; bu nedenle m8() metodu "Böyle Bir Metot Yok İstisnası" fırlatacaktır. Sonuç olarak, test bir istisna ile yürütülecektir.
Doğruluk notu: m8() yalnızca bir satır yazdırır, bu nedenle tanımlanan istisna aslında hiçbir zaman fırlatılmaz ve JUnit 4 numaralı rapor, testin başarısız olduğunu bildiriyor. Beklenen türü, yöntemin gerçekten fırlattığı türle eşleştirin. JUnit 5 bunu şu şekilde yazıyor: assertTrows.
Tüm test senaryoları geçildiğinden bu, testin başarılı bir şekilde yürütülmesiyle sonuçlanır.
Gerçek sonuç
Yukarıdaki örnekte üç test senaryosu bulunduğundan, tüm test senaryoları tek tek yürütülecektir. Aşağıdaki konsol ekran görüntüsüne bakın:

Konsolda görülebilecek aşağıdaki yazdırma ifadelerine bakın:
@BeforeClass kullanımı, tüm test senaryolarından önce yürütülür
Her test senaryosundan önce yürütülen @Before ek açıklamalarını kullanma
Her test senaryosundan sonra yürütülen @After kullanımı
Her test senaryosundan önce yürütülen @Before ek açıklamalarını kullanma
@Test(timeout) kullanılarak, zaman aşımını zorlamak için kullanılabilir. JUnit4 test durumu
Her test senaryosundan sonra yürütülen @After kullanımı
Her test senaryosundan önce yürütülen @Before ek açıklamalarını kullanma
@Test(expected) işlevini kullanarak, yürütme sırasında belirtilen istisnayı kontrol edecektir.
Her test senaryosundan sonra yürütülen @After kullanımı
Tüm test senaryolarından sonra yürütülen @AfterClass kullanımı
JUnit Sınıf İddiası
Ek açıklamalar bir metodun ne zaman çalışacağına karar verir; doğrulama metotları ise başarılı olup olmayacağına karar verir.
Bu sınıf, test senaryosu yazımında faydalı olan bir dizi doğrulama yöntemi sunar. Tüm doğrulama ifadeleri başarılı olursa, test sonuçları başarılı olur. Herhangi bir doğrulama ifadesi başarısız olursa, test sonuçları başarısız olur. Özel olarak tasarlanmış bölüm JUnit ileri sürmek Bu eğitim videosu her yöntemi ayrıntılı olarak ele almaktadır.
Daha önce de gördüğünüz gibi, aşağıdaki tabloda önemli Assert yöntemleri ve açıklamaları yer almaktadır:
| S.No. | Yöntem | Açıklama |
|---|---|---|
| 1. | void iddiaEquals(beklenen boole, gerçek boolean) | Bu, Object sınıfının equals metoduna benzer şekilde, iki değerin eşit olup olmadığını kontrol eder. |
| 2. | voidassertFalse(boole koşulu) | İşlevsellik, bir koşulun yanlış olup olmadığını kontrol etmektir. |
| 3. | voidassertNotNull(Nesne nesnesi) | “assertNotNull” işlevi bir nesnenin null olup olmadığını kontrol etmektir. |
| 4. | voidassertNull(Nesne nesnesi) | “assertNull” işlevi bir nesnenin boş olup olmadığını kontrol etmektir. |
| 5. | voidassertTrue(boolean koşulu) | “assertTrue” işlevi bir koşulun doğru olup olmadığını kontrol etmektir. |
| 6. | geçersiz başarısızlık () | Bir doğrulama hatası fırlatmak istiyorsanız, `fail()` her zaman başarısız bir sonuç verir. |
| 7. | voidasserSame([Dize mesajı] | “assertSame” işlevi, iki nesnenin aynı nesneye başvurup başvurmadığını kontrol etmektir. |
| 8. | voidassertNotSame([Dize mesajı] | “assertNotSame” işlevi, iki nesnenin aynı nesneye gönderme yapıp yapmadığını kontrol etmektir. |
JUnit Test Senaryoları Sınıfı
Birden fazla test çalıştırmak için TestCase sınıfı mevcuttur. JUnit çerçevesi paket. @Test ek açıklaması şunu belirtir: JUnit Bu, kendisine bağlı olan bu genel void metodun (burada bir test durumu) bir test durumu olarak çalıştırılabileceği anlamına gelir.
Sürüm notu: Test durumu, Test sonucu hem de Test odası mirasa ait JUnit çerçevesi paketinden JUnit 3. Hala JUnit 4.x yapıtı içerisinde gönderiliyorlar, ancak ek açıklama tabanlı testler TestCase'i genişletmiyor.
Aşağıdaki tabloda mevcut olan bazı önemli yöntemler gösterilmektedir. JUnit.Çerçeve.TestCase sınıf:
| S.No. | Yöntem | Açıklama |
|---|---|---|
| 1. | int countTestCases() | Bu yöntem, kaç test senaryosunun yürütüldüğünü saymak için kullanılır. run(TestResult tr) yöntemi. |
| 2. | TestResult createResult() | Bu yöntem bir oluşturmak için kullanılır. Test sonucu nesne. |
| 3. | Dize getName() | Bu yöntem bir dizeden başka bir şey olmayan bir dize döndürür. Test durumu adı. |
| 4. | TestSonucu çalıştırması() | Bu yöntem, bir test çalıştırmak için kullanılır ve test sonucunda bir değer döndürür. Test sonucu nesne. |
| 5. | geçersiz çalıştırma (TestResult sonucu) | Bu yöntem, bir testi yürütmek için kullanılır. Test sonucu Hiçbir şey döndürmeyen bir nesne. |
| 6. | void setName(Dize adı) | Bu yöntem, bir öğenin adını belirlemek için kullanılır. Test durumu. |
| 7. | geçersiz kurulum () | Bu yöntem, örneğin veritabanı bağlantısı oluşturmak gibi kaynak ilişkilendirme kodunu yazmak için kullanılır. |
| 8. | void gözyaşıDown() | Bu yöntem, kaynak serbest bırakma kodunu yazmak için kullanılır; örneğin, bir işlem gerçekleştirildikten sonra veritabanı bağlantısını serbest bırakmak gibi. |
JUnit TestSonucu Sınıfı
Bir testi çalıştırdığınızda, bir sonuç döndürür (şu biçimde: Test sonucu Bu TestResult nesnesi, sonuç nesnesini analiz etmek için kullanılabilir. Bu test sonucu ya başarısızlık ya da başarı olabilir.
Aşağıdaki tabloda, `junit.framework.TestResult` sınıfında kullanılan önemli yöntemleri görebilirsiniz:
| S.No. | Yöntem | Açıklama |
|---|---|---|
| 1. | void addError(Test testi, Atılabilir t) | Bu yöntem, teste bir hata eklemeniz gerektiğinde kullanılır. |
| 2. | void addFailure(Test testi, AssertionFailedError t) | Bu yöntem, arıza listesine bir arıza daha eklemeniz gerektiğinde kullanılır. |
| 3. | void endTest(Test testi) | Bu yöntem, bir testin yapıldığını (tamamlandığını) bildirmek için kullanılır. |
| 4. | int errorCount() | Bu yöntem, test yürütülmesi sırasında tespit edilen hataları almak için kullanılır. |
| 5. | Numaralandırma hatalar() | Bu yöntem basitçe bir hata koleksiyonu (burada bir Numaralandırma) döndürür. |
| 6. | int başarısızlıkSayısı() | Bu yöntem, test yürütülmesi sırasında tespit edilen hataların sayısını elde etmek için kullanılır. |
| 7. | geçersiz çalıştırma (TestCase testi) | Bu yöntem bir test senaryosunu yürütmek için kullanılır. |
| 8. | int runCount() | Bu yöntem, yürütülen testlerin sayısını basitçe sayar. |
| 9. | void startTest(Test testi) | Bu yöntem bir testin başlatıldığını bildirmek için kullanılır. |
| 10 | geçersiz durdurma() | Bu yöntem, test çalışmasını durdurmak için kullanılır. |
JUnit Test Paketi Sınıfı
Birden fazla testi belirli bir sırayla çalıştırmak istiyorsanız, tüm testleri tek bir yerde birleştirerek bunu yapabilirsiniz. Bu yere test paketi denir ve JUnit test odası Bu eğitim videosu, eksiksiz bir örnek üzerinden ilerlemektedir.
Aşağıdaki tabloda kullanılan önemli yöntemler yer almaktadır. JUnit.Çerçeve.TestSuite sınıf:
| S.No. | Yöntem | Açıklama |
|---|---|---|
| 1. | void addTest(Test testi) | Pakete bir test eklemek istiyorsanız bu yöntem kullanılır. |
| 2. | void addTestSuite(Sınıf testSınıfı) | Pakete test eklerken sınıfı belirtmek istiyorsanız bu yöntem kullanılır. |
| 3. | int countTestCases() | Test senaryolarının sayısını saymak istiyorsanız bu yöntem kullanılır. |
| 4. | Dize getName() | Bu yöntem test paketinin adını almak için kullanılır. |
| 5. | geçersiz çalıştırma (TestResult sonucu) | Bu yöntem, bir testi çalıştırmak ve test sonucunu toplamak için kullanılır. Test sonucu nesne. |
| 6. | void setName(Dize adı) | Bu yöntem, adını ayarlamak için kullanılır. Test odası. |
| 7. | Test testAt(int indeksi) | Bu yöntem, belirtilen dizindeki testi döndürmek istediğinizde kullanılır. |
| 8. | int testCount() | Bu yöntem, test paketindeki test sayısını döndürmek istediğinizde kullanılır. |
| 9. | Statik Test uyarısı (Dize mesajı) | Bu yöntem başarısız olacak bir test döndürür ve bir uyarı mesajı günlüğe kaydeder. |
