JUnit Test Durumları @Before @BeforeClass Ek Açıklaması
⚡ Akıllı Özet
JUnit en yaygın kullanılan birim test çerçevesidir. JavaAyrıca, test fikstürü ek açıklamaları, bir test sınıfı içindeki her test yönteminin çalıştırılmasından önce ve sonra tam olarak ne olacağını kontrol eder.
JUnit en popüler birimdir Test yapmak çerçeve Java. Açıkça tavsiye edilir Birim Testi. JUnit Web uygulamasını test etmek için sunucuya ihtiyaç duymadığı için test süreci hızlıdır.
MKS JUnit çerçeve aynı zamanda test senaryolarının ve test verilerinin hızlı ve kolay bir şekilde oluşturulmasına olanak tanır. org.junit Bu paket, birçok arayüz ve sınıftan oluşmaktadır. JUnit Test etme, Assert, After ve Before gibi test etme yöntemleri. Daha geniş anlamda JUnit Aile de aynı temel taşlar üzerine kuruludur.
Test düzeneği nedir?
Test düzeneğinin ne olduğunu anlamadan önce, aşağıdaki koda bakalım.
Bu kod, basit bir dosya üzerinde iki test senaryosunu yürütmek için tasarlanmıştır.
public class OutputFileTest { private File output; output = new File(...); output.delete(); public void testFile1(){ //Code to verify Test Case 1 } output.delete(); output = new File(...); public void testFile2(){ //Code to verify Test Case 2 } output.delete(); }
Burada birkaç sorun var
- Kod okunabilir değil.
- Kodun bakımı kolay değildir.
- Test takımı karmaşık olduğunda kod mantıksal sorunlar içerebilir.
Aynı kodu kullanarak karşılaştırın JUnit.
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
Kod çok daha okunabilir ve bakımı daha kolaydır. Yukarıdaki kod yapısı şöyledir: test fikstürü.
Bir test fikstürü, bir JUnit Test Durumu koşar. Tipik olarak test fikstürleri şunları içerir:
- Herhangi bir test senaryosu için kullanılabilen nesneler veya kaynaklar.
- Bu nesnelerin ve kaynakların kullanılabilir hale getirilmesini gerektiren faaliyetler.
- Bu faaliyetler
- paylaştırma (kurulum)
- tahsisin kaldırılması (söküm).
Kurulum ve Sökme
Armatürler önemlidir çünkü JUnit Bu kancaları her testin etrafına yerleştirir.
- Genellikle her test senaryosundan önce yapılması gereken bazı tekrarlanan görevler vardır. Örnek: bir veritabanı bağlantısı oluşturun.
- Aynı şekilde her test senaryosunun sonunda tekrarlanan bazı görevler olabilir. Örnek: test yürütmesi bittiğinde temizlemek için.
- JUnit Kurulum ve kaldırma işlemlerine yardımcı olan açıklamalar sağlar. Kaynakların serbest bırakılmasını ve test sisteminin bir sonraki test senaryosu için hazır durumda olmasını sağlar.
Bunlar JUnit Aşağıda açıklamalar ele alınmaktadır.
Kurmak
@Önce ek açıklama JUnit içeren bir yöntemde kullanılır Java Her test senaryosundan önce çalıştırılacak kod, yani her test yürütülmesinden önce çalışır.
Yıkım (karar ne olursa olsun)
@Sonrasında ek açıklama içeren bir yöntemde kullanılır Java Her test senaryosundan sonra çalıştırılacak kod. Bu yöntemler, test senaryosunda veya onaylama hataları durumunda herhangi bir istisna atılsa bile çalışacaktır.
Not:
- Yukarıda listelenen herhangi bir sayıda ek açıklamaya sahip olunmasına izin verilir.
- Açıklamalı tüm yöntemler @Önce in JUnit her test senaryosundan önce çalıştırılacaktır ancak herhangi bir sırayla çalıştırılabilirler.
- Üst sınıftan `@Before` ve `@After` metotlarını miras alabilirsiniz. Çalıştırma aşağıdaki gibidir ve standart bir çalıştırma sürecidir. JUnit.
- Uygula JUnit @Before süper sınıftaki yöntemler
- Bu sınıfta @Before yöntemlerini yürütün
- Bu sınıfta bir @Test yöntemini yürütün
- Bu sınıfta @After yöntemlerini yürütün
- Üst sınıfta @After yöntemlerini yürütün
JUnit 5 notu: Bu açıklamalar şunlardır: JUnit 4 (org.junit). JUnit 5'i onları yeniden adlandırdı. org.junit.jupiter.api, Ve JUnit Aşağıdaki 4 kod, eski model motorda hala çalışıyor.
| JUnit 4 ek açıklaması | JUnit 5 (Jüpiter) eşdeğeri | Runs |
|---|---|---|
| @Önce | @BeforeEach | Her test yönteminden önce |
| @Sonrasında | @Her birinden sonra | Her test yönteminden sonra |
| @Dersten önce | @BeforeAll | Bir keresinde tüm sınıfın önünde |
| @Dersten sonra | @Nihayet | Tüm sınıfın ardından bir kez |
| @Görmezden gelmek | @Engelli | Açıklamalı testi atlar |
Örnek: Test verisi olarak dosya içeren bir sınıf oluşturma
public class OutputFileTest { private File output; @Before public void createOutputFile() { output = new File(...); } @After public void deleteOutputFile() { output.delete(); } @Test public void testFile1() { // code for test case objective } @Test public void testFile2() { // code for test case objective } }
Yukarıdaki örnekte, yürütme zinciri aşağıdaki gibi olacaktır. Şema tracHer test yöntemi için bir oluşturma-test etme-silme döngüsü.
- createOutputFile()
- testDosyası1()
- deleteOutputFile()
- createOutputFile()
- testDosyası2()
- deleteOutputFile()
Varsayım:
testFile1() fonksiyonu testFile2() fonksiyonundan önce çalışır, bu da garanti edilmez.
Tek seferlik kurulum
- Testlerden herhangi biri yürütülmeden önce ve herhangi bir test yürütülmeden önce, tüm test sınıfı için bir yöntemi yalnızca bir kez çalıştırmak mümkündür. @Önce yöntem(ler).
- "Tek seferlik kurulum" sunucuları başlatmak, iletişimi açmak ve benzeri işler için kullanışlıdır. Her test için kaynakları kapatıp yeniden açmak zaman alıcıdır.
- Bu, ek açıklama kullanılarak yapılabilir @Dersten önce in JUnit.
@BeforeClass public static void Method_Name() { // class setup code here }
Yöntem şu olmalıdır: genel statik boşlukÇünkü, JUnit Test örneği oluşturulmadan önce bu çağrıyı yapar.
Sadece bir kez yıkmak
- Tek seferlik kurulum yöntemine benzer şekilde, tek seferlik temizleme yöntemi de mevcuttur. Bu yöntem, tüm test senaryosu yöntemlerinden sonra çalışır ve @Sonrasında açıklamalar gerçekleştirildi.
- Durdurmak için faydalıdır.ping sunucular ve iletişim bağlantılarının kapatılması.
- Bu, kullanılarak yapılabilir @Dersten sonra Ek açıklama.
@AfterClass public static void Method_Name() { // class cleanup code here }
JUnit Test Paketleri
Planlanan testler tamamlandıktan sonra, ilgili test sınıfları genellikle gruplandırılarak birlikte başlatılır.
Birden fazla testi belirli bir sırayla çalıştırmak istiyorsak, tüm testleri tek bir yerde birleştirerek bunu yapabiliriz. Bu yere test paketi denir. Test paketlerinin nasıl çalıştırılacağı ve nasıl kullanılacağına dair daha fazla ayrıntı için ilgili bölüme bakınız. JUnit bu kapsamda ele alınmaktadır. öğretici.
JUnit Test Çalıştırıcısı
JUnit test senaryolarınızın yürütülmesi için bir araç sağlar.
- JUnitçekirdek Bu testleri yürütmek için sınıf kullanılır.
- Bir yöntem adı verildi runClasses tarafından sağlanan org.junit.runner.JUnitçekirdek bir veya daha fazla test sınıfını çalıştırmak için kullanılır.
- Bu metodun dönüş tipi Sonuç nesne (org.junit.runner.SonuçBu, testlerle ilgili bilgilere erişmek için kullanılır. Daha fazla açıklık için aşağıdaki kod örneğine bakın.
public class Test { public static void main(String[] args) { Result result = JUnitCore.runClasses(CreateAndSetName.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println(result.wasSuccessful()); } }
Yukarıdaki kodda, yürüttüğümüz test senaryolarının başarısız ve başarılı sonuçlarını elde etmek için "result" nesnesi işlenir. Yardımcı fonksiyonlar, iddiaEşittir bu başarısızlıkları gündeme getirirken @Görmezden gelmek Bir testi atlıyor.
JUnit 5 notu: JUnitçekirdek olduğunu JUnit 4 koşucu. JUnit 5, bunun yerine şunu koyar: JUnit Platform fırlatıcı API, normalde IDE tarafından başlatılır, Gradle veya Maven Surefire.
Ad JUnit Programı
SDLC konusunda orta düzeyde bilgi sahibi, Java programlama ve temelleri yazılım testi Bu süreç, bir şeyi anlamaya yardımcı olur. JUnit program, tıpkı nasıl yapılacağını bilmek gibi birim testleri Entegrasyon testlerinden farklıdır.
Canlı bir örnek kullanarak birim testlerini anlayalım. Bir test metodu içeren ve `@test` ek açıklamasıyla işaretlenmiş bir test sınıfı oluşturmamız gerekiyor. @Ölçek aşağıda verildiği gibi:
MyFirstClassTest.java
package guru99.JUnit; import static org.junit.Assert.*; import org.junit.Test; public class MyFirstClassTest { @Test public void myFirstMethod(){ String str= "JUnit is working fine"; assertEquals("JUnit is working fine",str); } }
TestRunner.java
Yukarıdaki test yöntemimizi çalıştırmak için bir test çalıştırıcısı oluşturmamız gerekiyor. Test çalıştırıcısında, test sınıfını parametre olarak eklememiz gerekiyor. JUnitCore'un runClasses() metodu. Testin başarılı olup olmamasına bağlı olarak test sonucunu döndürür.
Bu konuyla ilgili daha fazla ayrıntı için aşağıdaki koda bakın:
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(MyFirstClassTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } System.out.println("Result=="+result.wasSuccessful()); } }
Çıktı
bir Zamanlar TestRunner.java Test yöntemlerimizi çalıştırdığımızda, başarısız veya başarılı şeklinde bir çıktı alıyoruz. Çıktının açıklaması aşağıdadır:
- Bu örnekte, yürütüldükten sonra MyFirstClassTest.javaTest başarılı geçti ve sonuç yeşil renkte.
- Eğer başarısız olsaydı sonuç kırmızı olarak gösterilirdi ve başarısızlık hata mesajında gözlemlenebilirdi. trace. Bakınız JUnit Aşağıda GUI (grafik kullanıcı arayüzü) bulunmaktadır:


