JUnit Örnekle Ek Açıklamalar Eğitimi: @Test ve @After Nedir?

Nedir? JUnit Ek açıklamalar?

JUnit Açıklamalar eklenebilen sözdizimsel meta-verilerin özel bir 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 Junit4'te tanıtıldı, bu da Java kodu daha okunabilir ve basit hale getirir. Junit3 ile Junit4 arasındaki en büyük fark, Junit4'ün açıklama tabanlı olmasıdır.

Junit5'teki açıklamaların bilgisiyle, kişi kolayca öğrenebilir ve uygulayabilir JUnit Ölçek. Aşağıda önemli ve sık kullanılanlar yer almaktadır JUnit ek açıklamalar listesi:

S.No. Açıklamalar Açıklama
1. @Ölçek Bu ek açıklama, eklendiği genel geçersiz yöntemin bir test Senaryosu olarak yürütülebileceğini gösteren org.junit.TestCase'in yerine geçmiştir.
2. @Önce Bu ek açıklama, her test senaryosundan önce önkoşullar gibi bazı ifadeleri yürütmek istiyorsanız kullanılır.
3. @Dersten önce Bu açıklama, bazı ifadeleri tüm test senaryolarından önce yürütmek istiyorsanız kullanılır; örneğin test bağlantısı, tüm test senaryolarından önce yürütülmelidir.
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, geçici dosyaları, değişkenleri silmek vb. için.
5. @Dersten sonra Bu ek açıklama, örneğin tüm test senaryolarının yürütülmesinden sonra kaynakların serbest bırakılması gibi tüm test senaryolarından sonra bazı ifadeleri yürütmek istiyorsanız kullanılabilir.
6. @Yoksayıldı Bu ek açıklama, örneğin test yürütme sırasında bazı test senaryolarını devre dışı bırakmak için test yürütme sırasında bazı ifadeleri göz ardı etmek istiyorsanız kullanılabilir.
7. @Test(zaman aşımı=500) Bu ek açıklama, örneğin bir SLA (Hizmet seviyesi sözleşmesi) 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ı ayarlamak istiyorsanız kullanılabilir.
8. @Test(beklenen=IllegalArgumentException.class) Bu açıklama, test yürütme sırasında bazı istisnaları işlemek istiyorsanız kullanılabilir. Örneğin, belirli bir yöntemin belirtilen istisnayı atıp atmadığını kontrol etmek istiyorsanız.

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 Yukarıda listelenen açıklamalara eklenen çeşitli yöntemlere sahip aşağıdaki Java sınıfını göz önünde bulundurun:

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 yürütmek için bir test çalıştırıcısı 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 ifadesi bir konsolda görülebilecek.
  • Yukarıdaki tabloda tartışıldığı gibi @Before ek açıklaması JUnit, @BeforeClass [ method m1() ve m2() ] sırasıyla her test senaryosundan önce ve tüm test senaryolarından önce yürütülecektir.
  • Aynı şekilde @After in JUnit, @afterClass (yöntem m3() ve m4()) sırasıyla her test senaryosundan sonra ve tüm test senaryolarından sonra yürütülecektir. @ignore (yöntem m6()), testi yok sayma olarak değerlendirilecektir.

Yukarıdaki Java sınıfında kullanılan test senaryolarını detaylı olarak inceleyelim:

  1. Aşağıda verilen m5() yöntemini düşünün:
	@Test		
    public void m5() {					
        list.add("test");					
        assertFalse(list.isEmpty());			
        assertEquals(1, list.size());			
    }		

Yukarıdaki yöntemde “list” değişkenine bir dize eklerken

  • 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 boyut bir olur.

  • liste.size() int değerini “1” olarak döndürmelidir.
  • So iddiaEquals(1, liste.size()) doğruya dönmelidir.
  • Sonuç olarak, test senaryosu geçmek.
  1. Aşağıda verilen m7() yöntemini düşünün:
@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)ek açıklama, test senaryosunda zaman aşımını zorlamak için kullanılır.

  1. Aşağıda verilen m8() yöntemini düşünün:
@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) yürütme sırasında belirtilen istisnayı kontrol edecek, böylece m8() yöntemi "Böyle Bir Yöntem İstisnası Yok" oluşturacaktır. Sonuç olarak test bir istisna dışında yürütülecektir.

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 olduğundan, tüm test senaryoları tek tek yürütülecektir. Aşağıdaki çıktıya bakın:

JUnit Ek Açıklamalar Örneği
JUnit Ek Açıklamalar Örneği

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ı

Bu sınıf, bir test senaryosu yazarken yararlı olacak bir dizi iddia yöntemi sağlar. Tüm Assert ifadeleri geçilirse test sonuçları başarılı olur. Herhangi bir iddia ifadesi başarısız olursa, test sonuçları başarısız olur.

Daha önce gördüğünüz gibi, aşağıdaki tabloda önemli Assert yöntemleri ve açıklamaları açıklanmaktadır:

S.No. Yöntem Açıklama
1. void iddiaEquals(beklenen boole, gerçek boolean) Object sınıfının equals yöntemine 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 () Herhangi bir iddia hatası atmak istiyorsanız, her zaman başarısız bir kararla sonuçlanan fail() işlevine sahipsiniz.
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 testi çalıştırmak için TestCase sınıfı mevcuttur. org.junit.TestDavası paketler. @Test ek açıklaması şunları söylüyor JUnit eklendiği bu genel geçersiz yöntemin (burada Test Senaryosu) bir test senaryosu olarak çalıştırılabileceğini unutmayın.

Aşağıdaki tabloda mevcut bazı önemli yöntemler gösterilmektedir. org.junit.TestDavası sınıf:

S.No. Yöntem Açıklama
1. int countTestCases() Bu yöntem, kaç tane 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.
4. TestSonucu çalıştırması() Bu yöntem, bir sonuç döndüren bir testi yürütmek için kullanılı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 nesne.
6. void setName(Dize adı) Bu yöntem bir adı ayarlamak için kullanılır. Test durumu.
7. geçersiz kurulum () Bu yöntem kaynak ilişkilendirme kodunu yazmak için kullanılır. örneğin bir veritabanı bağlantısı oluşturun.
8. void gözyaşıDown() Bu yöntem kaynak sürüm kodunu yazmak için kullanılır. Örneğin, işlem işlemini gerçekleştirdikten sonra veritabanı bağlantısını bırakın.

JUnit TestSonucu Sınıfı

Bir testi çalıştırdığınızda, bir sonuç döndürür (formunda) Test sonucu nesne). Bu TestResult nesnesi, ortaya çıkan nesneyi analiz etmek için kullanılabilir. Bu test sonucu başarısız veya başarılı olabilir.

org.junit.TestResult sınıfında kullanılan önemli yöntemler için aşağıdaki tabloya bakın:

S.No. Yöntem Açıklama
1. void addError(Test testi, Atılabilir t) Teste bir hata eklenmesi gerekiyorsa bu yöntem kullanılır.
2. void addFailure(Test testi, AssertionFailedError t) Bu yöntem, arıza listesine bir arıza eklemeniz gerekiyorsa 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ütme sırasında tespit edilen hatayı almak için kullanılır.
5. Numaralandırma hatalar() Bu yöntem yalnızca hataların bir koleksiyonunu (burada numaralandırma) döndürür.
6. int başarısızlıkSayısı() Bu yöntem, testin yürütülmesi sırasında tespit edilen hataların sayısını almak 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 yalnızca yürütülen testi 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 durdurulacak test çalıştırması için kullanılır.

JUnit Test Paketi Sınıfı

Birden fazla testi belirli bir sırayla yürütmek istiyorsanız, tüm testleri tek bir yerde birleştirerek bunu yapabilirsiniz. Burası test süitleri olarak adlandırılıyor.

Kullanılan önemli yöntemler için aşağıdaki tabloya bakın. org.junit.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 yürütmek 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) Testi verilen dizine döndürmek istiyorsanız bu yöntem kullanılır.
8. int testCount() Suite'te bir dizi testi döndürmek istiyorsanız bu yöntem 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.

ÖZET

  • JUnit tüm önemli sınıfları sağlayan taşınabilir bir API sağlar ve Selenium Birim testi yazarken yararlı olan ek açıklamalar.
  • Test senaryosu yazarken çok faydalı olan sınıflar
    • org.junit.İddia
    • org.junit.TestDavası
    • org.junit.TestSonucu
    • org.junit.TestSuite
  • Önemli ve sık kullanılan JUnit ek açıklamalar listesi@Önce@ÖnceSınıf@Sonra

    @Dersten sonra

    @Ölçek

    @Görmezden gelmek