junit test execution order
Bu Eğitimde JUnit Test Durumları için Yürütme Sırasının nasıl ayarlanacağı açıklanmaktadır. JUnit 4 ve JUnit 5'teki JUnit Test Yürütme Sırasını ayarlamak için Ek Açıklamalar ve Sınıflar hakkında bilgi edineceksiniz:
Bir test paketinin nasıl oluşturulacağını, test senaryolarına nasıl kategori veya etiket ekleneceğini ve önceki eğitimimizdeki kategori veya etikete göre testleri nasıl filtreleyeceğimizi (test olaylarını hariç tutma veya dahil etme) öğrendik.
Ayrıca, JUnit 4'te öğrendik. @Category, @IncludeCategory, ve @Evleneceksen JUnit 5 varken test durumlarını filtrelemek için @Evleneceksen ve @Evleneceksen aynısını yapmak.
JUnit 5, ek açıklamaları kullanan ek filtreleme seçeneklerine sahiptir @IncludePackages, @ExcludePackages, ve ayrıca sınıf adı modellerini kullanarak sınıfları dahil etmek veya hariç tutmak için ek açıklamalar.
=> JUnit Eğitim Öğreticilerinin A-Z'sini Görmek İçin Burayı Kontrol Edin .
Ne öğreneceksin:
JUnit Test Yürütme Sırası
Bu eğiticide, her bir test senaryosu için bir siparişin nasıl ayarlanacağını öğreneceğiz, böylece ayarlanan sırada çalışacaklar. JUnit 4'te ve JUnit 5'te testlerin nasıl sıralanacağını öğreneceğiz.
Test yöntemleri varsayılan olarak belirli bir sırayı izlemez.Test senaryolarının mutlaka yazıldıkları sırada yürütülmesi gerekmez.
Test senaryoları için yürütme sırasını belirlemenin farklı yolları veya modları vardır. Ayrıca, JUnit 4'ün, JUnit 5 ile karşılaştırıldığında test senaryolarının sıralanmasında nasıl değişiklik gösterdiğini de derinlemesine inceleyeceğiz.
JUnit 4: @FixedMethodOrder, Sınıf MethodSorters
JUnit 4.11'den başlayarak, ek açıklamaya sahibiz @DiksiyonMethodOrder ve MethodSorters.class bir testin yürütülmesi için bir emir belirleme olanağını desteklemek.
Paket org.junit.runners. * sınıfı içermek için içe aktarılması gerekiyor Yöntem Sıralayıcılar . Bu sınıf, test senaryolarının nasıl sipariş edilmesi gerektiğine karar verir. Yöntem Sıralayıcılar Sahip olmak üç Sıralama değerler.
Aşağıda, sınıfın enum değerleri ve her bir değerin hizmet ettiği amaç verilmiştir:
MethodSorters.DEFAULT | Bu enum değeri, test yürütmesini belirli bir sıraya göre sıralar. Ancak, test senaryolarını hangi sırayla çalıştıracağı asla tahmin edilemez. |
Bu nedenle, hangi test senaryosunun önce çalıştırılması ve hangilerinin daha sonra takip edilmesi gerektiğine dair kararınız üzerinde kontrole sahip olursunuz. | |
DEFAULT enum ile sıralanmış birden çok yönteme sahip bir sınıf çalıştırıldığında, sıranın test yürütme sırasında her seferinde aynı kaldığını gözlemledim. | |
Ancak, siparişin nasıl belirlendiğini tahmin etmem veya çözebilmemin bir yolu yok. | |
MethodSorters.JVM | JVM enum ile test yürütme sırası, adından da anlaşılacağı gibi JVM tarafından belirlenir. |
Bu durumda, sınıfı her çalıştırdığınızda, testler aynı değil rastgele sırayla yürütülecektir. | |
Başka bir deyişle, testlerin sırası her çalışma sırasında değişir. | |
MethodSorters.NAME_ASCENDING | Bu numaralandırma, test yöntemlerini yöntem adının sözlükbilimsel sırasına göre sıralar. Bu nedenle, test yürütmenizi sipariş etmenin en öngörülebilir yolu olduğundan emin olabilirsiniz. |
Bu nedenle, belirlediğiniz adının sözlükbilimsel sırasına göre testlerin sırasına önceden karar verebilirsiniz. |
Ek açıklama @Tamamdanie giriş parametresini alır Yöntem Sıralayıcılar enum değeri ile. Ek açıklama için gerekli paket org.junit.FixedMethodOrder.
Kod aracılığıyla nasıl uygulandığına bakalım.
MethodSorters.DEFAULT için Kod Uygulaması
Bir JUnit sınıf dosyası oluşturalım ' Junit4TestOrder.java ' nerede kullanacağız MethodSorters.DEFAULT
Junit4TestOrder.java kodu
@FixMethodOrder(MethodSorters.DEFAULT) public class JUnit4TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Sınıfı üç kez çalıştırıyoruz ve aşağıdaki gibi aynı test sırasının çalıştırıldığını görüyoruz, ancak test senaryoları sıralı sırada yürütülebilir veya uygulanmayabilir.
Konsol penceresi sonuçları aşağıdaki gibi gösterdi - test yürütme sırası TestCase_3, TestCase_1 ve TestCase_2 şeklindedir ve sıra çalıştırma sayısıyla değişmez.
MethodSorters için Kod Uygulama. JVM
Şimdi 'Junit4TestOrder.java' yı güncelleyeceğiz. MethodSorters.JVM
Junit4TestOrder.java için kod pasajı
@FixMethodOrder(MethodSorters . JVM ) public class JUnit4TestOrder {
Sınıfı iki kez çalıştırırız ve testlerin yürütme sırası her çalıştırmada değişir.
İçin konsol penceresi ilk çalıştırma aşağıda gösterildiği gibidir:
İçin konsol penceresi ikinci çalıştırma aşağıda gösterildiği gibidir:
Her iki çalışmada da testlerin gerçekleştirilme sırasındaki değişikliği keskin bir şekilde gözlemleyin. İki çalışmadaki testlerin sırası farklıdır.
MethodSorters için Kod Uygulama.NAME_ASCENDING
Şimdi 'Junit4TestOrder.java' yı güncelleyeceğiz. MethodSorters.NAME_ASCENDING
Junit4TestOrder.java için kod pasajı
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class JUnit4TestOrder {
Sınıfı iki kez çalıştırırız, yürütülen testlerin sırası aynı kalır ve yöntem adının artan sırasına göre yürütülür.
Konsol penceresi TestCase_1, TestCase_2 ve TestCase_3 sırasına göre yürütülen testlerin sonucunu gösterir.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
Testlerin yürütülme sırasını kontrol etmek için aşağıdaki varlıklar aynı şeyi yapmaya yardımcı olur:
- Ek açıklama @TestMethodOrder
- @Order ek açıklaması
- MethodOrderer arabirimlerine ait sınıflar
Yerleşik MethodOrderer sınıfları ve ayrıntıları aşağıdaki gibidir:
MethodOrderer yerleşik sınıfı | Paketten | Detaylar |
---|---|---|
Alfasayısal | org.junit.jupiter.api.MethodOrderer.Alphanumeric | Test yöntemlerini adlarına göre alfanümerik olarak sıralar |
Sipariş Notu | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | @Order notuna iletilen değerlere göre test yöntemlerini sayısal olarak sıralar |
Rastgele | org.junit.jupiter.api.MethodOrderer.Random | JUnit 4'teki MethodSorters.JVM durumunda olduğu gibi test yöntemlerini rastgele sıralar |
Şimdi bu sıralama stratejilerinin her birinin gösterisine bakalım:
Alphanumeric.class için Kod Uygulaması
JUnit4TestOrder.java ile aynı JUnit5TestOrder.java adında bir JUnit 5 sınıf dosyası oluşturalım ve testleri alfasayısal olarak sıralamak için Alphanumeric.class ile ek açıklamayı kullanalım.
Junit5TestOrder.java kodu
@TestMethodOrder(Alphanumeric.class) public class JUnit5TestOrder { @Test public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Sınıfı üç kez çalıştırdık ve yine de aynı test sırasının, test yöntemi adının alfanümerik olarak sıralanmış sırasına göre çalıştırıldığını gördük.
Sınıf dosyasının yürütme sonrası, test yürütme sırası:
- Testcase_1,
- Testcase_2 ve
- Testcase_3
Not: Alfasayısal sıralama stratejisi büyük / küçük harfe duyarlıdır bu yüzden testcase_1 adında başka bir test olayımız olması durumunda.
Yürütme emri şöyle olacaktır:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Bu nedenle, büyük harf, küçük harf yöntem adlarına göre önceliklidir.
Random.class İçin Kod Uygulaması
Şimdi ek açıklamayı Random.class ile kullanmak için JUnit 5 sınıfı JUnit5TestOrder.java'yı güncelleyeceğiz.
Junit5TestOrder.java için kod pasajı
@TestMethodOrder (Random.class) public class JUnit5TestOrder {
Sınıfı iki kez koştuk ve her seferinde sınıfı çalıştırdığımızda, testin yürütülme sırasının rastgele sıralandığını gördük.
İçin sınıf dosyasının yürütülmesini yayınla İlk kez , test yürütme sırası şöyleydi:
- Testcase_2,
- Testcase_1
- Testcase_3
İçin çalıştırıldığında infaz emri ikinci zaman gösterdi:
- Testcase_2,
- Testcase_3
- Testcase_1 .
OrderAnnotation.class için Kod Uygulaması
Şimdi ek açıklamayı kullanmak için JUnit 5 sınıfı JUnit5TestOrder.java'yı güncelleyeceğiz. OrderAnnotation.class. Ek açıklama @Sipariş buradaki test yöntemlerinin öncelik belirlemesinde de önemli bir rol oynayacaktır.
Junit5TestOrder.java için kod pasajı
@TestMethodOrder(OrderAnnotation.class) public class JUnit5TestOrder { @Test @Order(1) public void Testcase_3() { System.out.println('Testcase_3 executes'); } @Test @Order(2) public void Testcase_1() { System.out.println('Testcase_1 executes'); } @Test @Order(3) public void Testcase_2() { System.out.println('Testcase_2 executes '); } }
Dolayısıyla, bu test yürütme sırasını belirleme stratejisinde, @Order notation, test yöntemlerini her sipariş değeri bunun için ayarlanmış.
Bir test yöntemi için @Order değeri ne kadar düşükse, yürütme sırasındaki önceliği o kadar yüksek olur.
Yürütme sonrası, testlerin sırası aşağıdaki gibi çalıştırıldı:
- Testcase_3,
- Testcase_1
- Testcase_2 çünkü test senaryoları için sıra kümesi 1,2 ve 3'tür.
Bu nedenle, test senaryolarının sırayla yazılmış olması önemli değildir. Ayrıca, yöntem adlarının alfanümerik sırada olup olmadığı da önemli değildir.
JUnit 5: Özel Sipariş Oluşturma
Yerleşik Sipariş sınıflarının yanı sıra, JUnit 5 ayrıca arabirimi uygulayarak özel siparişleri de destekler MethodOrderer . JUnit 5 sürüm 5.4'ten başlayarak, özel sıralama desteklenmektedir.
Yöntem uzunluğuna göre özel bir siparişin nasıl oluşturulup uygulanacağını hızlıca görelim.
Aşama 1: MethodOrderer arabirimini uygulayan özel bir sipariş sınıfı oluşturuldu ve sınıfı TestCaseLengthOrder olarak adlandırdı
TestCaseLengthOrder.java kodu
public class TestCaseLengthOrder implements MethodOrderer { @Override public void orderMethods(MethodOrdererContext context) { MethodDescriptor md1; MethodDescriptor md2; context.getMethodDescriptors().sort((md1, md2)-> md1.getMethod().getName().length().compareTo(md2.getMethod().getName().length())); } }
TestCaseLengthOrder kod açıklaması:
- MethodOrderer arabirimi uygulanarak özel bir sipariş sınıfı oluşturulur.
- Interface MethodOrderer'dan uygulanan yerleşik yöntem olan void orderMethods (MethodOrderContext context) {} yöntemi. Test sıralama mantığının uygulamasını burada tanımlayacaksınız.
- MethodDescriptor, bir yöntemle ilgili ayrıntıları içeren bir arabirimdir:
- MethodDescriptor.getMethod () yöntemi, bu tanımlayıcının yöntem adını alır.
- Yöntem adı, getName () yani MethodDescriptor.getMethod () yöntemiyle String'e dönüştürülür. GetName () ve
- Yöntem length (), yöntemin uzunluğunu getirir (tıpkı string.length () 'in bir dize değerinin uzunluğunu getirmesi gibi).
- Tüm yöntem adları, ComparTo () yöntemi kullanılarak birbiriyle karşılaştırılır.
- GetMethodDescriptors () yöntemi, bir sınıftaki tüm yöntem tanımlayıcılarının listesini alır.
- Sort () yöntemi, MethodDescriptor nesnelerini sıralar.
Artık MethodOrderer'ın her API'sini açıkça anladığımıza göre, yukarıdaki kodu yorumlamanın kolay olduğunu umuyoruz.
Adım 2 : Test sınıfında herhangi bir yerleşik sipariş gibi özel sipariş sınıfını kullanın.
@TestMethodOrder ek açıklamasına girdi olarak.
JUnit_CustomOrder.java kodu
@TestMethodOrder(TestCaseLengthOrder.class) class JUnit_CustomOrder{ @Test public void subt(){ } @Test public void add(){ } @Test public void multiply(){ } @Test public void divide(){ }
Aşama 3:
Yürütme sonrası JUnit_CustomOrder.class Test çalıştırma sırası, test senaryolarının adının uzunluğunun artan sırasına göre aşağıdaki gibidir:
- Ekle(),
- subt (),
- divide ()
- çarpmak()
Sonuç
Bu öğreticiyi JUnit Test Yürütme Sırasıyla sonuçlandırmak için.
- Belirli notları ve belirli sınıfları kullanarak test senaryolarının sırasını nasıl ayarlayacağımızı öğrendik.
- Ayrıca, sipariş stratejilerinin değişmesine bağlı olarak JUnit 4 ve JUnit 5 için testler sipariş etmenin çeşitli yollarını öğrendik.
- Ayrıca, JUnit 5'te nasıl özelleştirilmiş bir sınıflandırma sınıfı oluşturabileceğimizi ve test senaryolarını yürütme sırasında sipariş etmek için nasıl kullanabileceğimizi öğrendik.
=> JUnit Yeni Başlayanlar Kılavuzuna Bir Göz Atın.
Önerilen Kaynaklar
- JUnit Testleri: Örneklerle JUnit Test Durumları Nasıl Yazılır
- JUnit Ek Açıklamalarının Listesi: JUnit 4 Vs JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Paketi ve Filtreleme Test Durumları: JUnit 4 Vs JUnit 5
- JUnit Test Fikstürü Nedir: JUnit 4 Örnekleriyle Eğitim
- Yeni Başlayanlar İçin JUnit Eğitimi - JUnit Testi Nedir?
- JUnit Testlerini Yürütmenin Birden Çok Yolu
- Paralelde Appium Testlerinin Büyük Ölçekli Yürütülmesi Nasıl Yapılır