JUnit, Java'daki en popüler birim Test çerçevesidir. Birim Testi için açıkça önerilir. JUnit, web uygulamasını test etmek için sunucuya ihtiyaç duymaz, bu da test sürecini hızlandırır.
JUnit çerçevesi ayrıca test senaryolarının ve test verilerinin hızlı ve kolay bir şekilde oluşturulmasını sağlar. Org.Junit paketi, sonra, önce, vb Testi, Assert olarak JUnit Test arabirimlerinin ve sınıfları meydana
Test fikstürü nedir
Bir test fikstürünün ne olduğunu anlamadan önce, aşağıdaki kodu inceleyelim
Bu kod, basit bir dosya üzerinde iki test senaryosu yürütmek için tasarlanmıştır.
public class OutputFileTest {özel Dosya çıkışı;çıktı = yeni Dosya (…);output.delete ();public void testFile1 () {// Test Senaryosu 1'i doğrulama kodu}output.delete ();çıktı = yeni Dosya (…);public void testFile2 () {// Test Senaryosu 2'yi doğrulama kodu}output.delete ();}
Burada birkaç sorun var
- Kod okunabilir değil
- Kodun bakımı kolay değil.
- Test paketi karmaşık olduğunda, kod mantıksal sorunlar içerebilir.
JUnit kullanarak aynı kodu karşılaştırın
public class OutputFileTest{özel Dosya çıkışı;@Before public void createOutputFile (){çıktı = yeni Dosya (…);}@ Genel void'den sonra deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// test senaryosu hedefi kodu}@Test public void testFile2 (){// test senaryosu hedefi kodu}}
Kod çok daha okunabilir ve sürdürülebilir. Yukarıdaki kod yapısı bir Test fikstürüdür.
Test fikstürü, bir Test Vakasının çalıştığı bir bağlamdır. Tipik olarak, test fikstürleri şunları içerir:
- Herhangi bir test senaryosu için mevcut olan nesneler veya kaynaklar.
- Bu nesneleri / kaynakları kullanılabilir kılan gerekli etkinlikler.
- Bu aktiviteler
- tahsis ( kurulum )
- ayırma ( sökme ).
Kurulum ve Sökme
- 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 sökmeye yardımcı olan ek 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.
Bu ek açıklamalar aşağıda tartışılmaktadır.
Kurulum
@Before , her test senaryosundan önce çalıştırmak için Java kodu içeren bir yöntemde kullanılır. yani, her testin yürütülmesinden önce çalışır.
Teardown (karara bakılmaksızın)
@ Ek açıklama, her test durumundan sonra çalıştırılacak java kodunu içeren bir yöntemde kullanılır. Bu yöntemler, test senaryosunda herhangi bir istisna atılsa veya onaylama başarısızlıkları durumunda bile çalışacaktır.
Not:
- Yukarıda listelenen herhangi bir sayıda ek açıklamaya sahip olmasına izin verilir.
- @Before ile not verilen tüm yöntemler her test senaryosundan önce çalışacaktır, ancak herhangi bir sırayla çalışabilirler.
- @Before ve @After yöntemlerini bir süper sınıftan miras alabilirsiniz, Yürütme aşağıdaki gibidir: JUnit'te standart bir yürütme işlemidir.
- Süper sınıftaki @Before yöntemlerini yürütün
- Bu sınıftaki @Before yöntemlerini yürütün
- Bu sınıfta bir @Test yöntemi yürütün
- Bu sınıftaki @After yöntemlerini yürütün
- Süper sınıftaki @After yöntemlerini yürütün
Örnek: Bir test fikstürü olarak dosyalı bir sınıf oluşturma
public class OutputFileTest{özel Dosya çıkışı;@Before public void createOutputFile (){çıktı = yeni Dosya (…);}@ Genel void'den sonra deleteOutputFile (){output.delete ();}@Test public void testFile1 (){// test senaryosu hedefi kodu}@Test public void testFile2 (){// test senaryosu hedefi kodu}}
Yukarıdaki örnekte, yürütme zinciri aşağıdaki gibi olacaktır:
- createOutputFile ()
- testFile1 ()
- deleteOutputFile ()
- createOutputFile ()
- testFile2 ()
- deleteOutputFile ()
Varsayım: testFile1 (), testFile2 () 'den önce çalışır - ki bu garanti edilmez.
Yalnızca bir kez kurulum
- Bir yöntemi, testlerden herhangi biri yürütülmeden önce ve herhangi bir @Before yönteminden önce tüm test sınıfı için yalnızca bir kez çalıştırmak mümkündür .
- "Yalnızca bir kez kurulum" sunucuları başlatmak, iletişimleri açmak vb. İçin kullanışlıdır. Her test için kaynakları kapatıp yeniden açmak zaman alır.
- Bu, @BeforeClass ek açıklaması kullanılarak yapılabilir.
@BeforeClass genel statik void Method_Name () {// sınıf kurulum kodu burada}
Yalnızca bir kez yıkın
- Yalnızca bir kez kuruluma benzer şekilde, yalnızca bir kez temizleme yöntemi de mevcuttur. Tüm test durumu yöntemlerinden sonra ve @After ek açıklamalar yürütüldükten sonra çalışır .
- Sunucuları durdurmak, iletişim bağlantılarını kapatmak vb. İçin kullanışlıdır.
- Bu, @AfterClass ek açıklaması kullanılarak yapılabilir.
@AfterClass genel statik void Method_Name (){// sınıf temizleme kodu burada}
JUnit Test Paketleri
Belirli bir sırada birden fazla test yapmak istersek, tüm testleri tek bir yerde birleştirerek yapılabilir. Buraya test süitleri deniyor. Test paketlerinin nasıl yürütüleceği ve JUnit'te nasıl kullanıldığı hakkında daha fazla ayrıntı bu eğitimde ele alınacaktır.
Junit Test Koşucusu
JUnit, test durumlarınızın yürütülmesi için bir araç sağlar.
- Bu testleri yürütmek için JUnitCore sınıfı kullanılır.
- Org.junit.runner.JUnitCore tarafından sağlanan runClasses adlı bir yöntem , bir veya birkaç test sınıfını çalıştırmak için kullanılır.
- Bu yöntemin dönüş türü , testlerle ilgili bilgilere erişmek için kullanılan Result nesnesidir ( org.junit.runner.Result ). Daha fazla netlik için aşağıdaki kod örneğine bakın.
public class Test {public static void main (String [] args) {Sonuç sonucu = JUnitCore.runClasses (CreateAndSetName.class);for (Hata hatası: result.getFailures ()) {System.out.println (fail.toString ());}System.out.println (sonuç.wasSuccessful ());}}
Yukarıdaki kodda "sonuç" nesnesi, yürüttüğümüz test durumlarının başarısızlıklarını ve başarılı sonuçlarını almak için işlenir.
İlk JUnit programı
SDLC, java programlama ve yazılım test sürecinin temelleri hakkında adil bilgi, JUnit programının anlaşılmasına yardımcı olur.
Canlı bir örnek kullanarak Birim Testini anlayalım. Aşağıda verildiği gibi @Test ile açıklama eklenmiş bir test yöntemi olan bir test sınıfı oluşturmamız gerekiyor :
MyFirstClassTest.java
paket guru99.JUnit;statik org.JUnit.Assert. *;import org.JUnit.Test;public class MyFirstClassTest {@Ölçekpublic void myFirstMethod () {String str = "JUnit düzgün çalışıyor";assertEquals ("JUnit iyi çalışıyor", str);}}
TestRunner.java
Test yöntemimizi (yukarıda) yürütmek için, bir test çalıştırıcısı oluşturmamız gerekiyor. Test çalıştırıcısında, JUnitCore'un runclasses () yönteminde bir parametre olarak test sınıfını eklememiz gerekir. Testin geçip geçmediğine bağlı olarak test sonucunu döndürecektir.
Bununla ilgili daha fazla ayrıntı için aşağıdaki koda bakın:
paket 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) {Sonuç sonucu = JUnitCore.runClasses (MyFirstClassTest.class);for (Hata hatası: result.getFailures ()) {System.out.println (fail.toString ());}System.out.println ("Result ==" + result.wasSuccessful ());}}
Çıktı
Bir kez TestRunner.java test yöntemleri yürütür başarısız ya geçerken biz çıktıyı olsun. Lütfen aşağıdaki çıktı açıklamasını bulun:
- Bu örnekte, MyFirstClassTest.java çalıştırıldıktan sonra , test geçilir ve sonuç yeşildir.
- Başarısız olsaydı, sonucu Kırmızı olarak göstermesi gerekirdi ve arıza, arıza izlemede görülebilir. JUnit gui aşağıya bakın:
Özet :
- JUnit, bir test içeren bir yöntemi tanımlamak için birkaç ek açıklamayı destekleyen bir çerçevedir.
- JUnit, JUnit'e, kullanıldığı genel void yönteminin bir test senaryosu olarak çalışabileceğini söyleyen @Test adında bir açıklama sağlar .
- Test fikstürü, bir test senaryosunun çalıştığı bir bağlamdır
- Birden fazla testi belirli bir sırayla yürütmek için tüm testleri tek bir yerde birleştirerek yapılabilir. Buraya test süitleri deniyor.
- JUnit, Test Çalıştırıcısı olarak adlandırılan test senaryolarımızı çalıştırabileceğimiz testlerin yürütülmesi için bir araç sağlar.