junit test suite filtering test cases
Bu Eğitimde JUnit Test Paketi Nedir, Bir Test Paketi Nasıl Oluşturulur ve JUnit 4 ve JUnit 5'de Test Vakaları Nasıl Filtrelenir tartışılacaktır:
Önceki eğitimimizde yürütme sırasında belirli test olaylarının nasıl atlanacağını öğrendik. Bunu yapmak için JUnit 4 ve JUnit 5'te kullanılan farklı ek açıklamaları da öğrendik.
Bu eğitimde şunları öğreneceğiz:
- Test paketi nedir?
- Birden çok test durumunu bir grubun içine alarak ve paketi JUnitCore sınıfını kullanarak çalıştırarak nasıl bir test paketi oluşturabiliriz?
=> Özel JUnit Eğitim Eğitim Serisi İçin Burayı Ziyaret Edin.
Ne öğreneceksin:
JUnit Test Paketi
JUnit 4: @RunWith, @SuiteClasses Annotations
Öğretici JUnit Testlerini Yürütmenin Birden Çok Yolu bir test paketinin nasıl oluşturulacağını gösteren JUnit 4.
Ek açıklamalar @Filmdenkare ve @Evleneceksen birden çok JUnit test sınıfını gruplayarak bir test paketi oluşturmamıza yardımcı oldu. Daha sonra, JUnitCore.runclasses () sınıfına sahip bir çalıştırıcı dosyası, oluşturulan test paketinin yürütülmesini çağırdı.
Lütfen gerçek kodla birlikte iş akışındaki tüm dakika ayrıntıları için belirtilen bölüme bakın. JUnit 4.
JUnit 5: @RunWith, @SelectClasses, @SelectPackages Annotations
İçinde bir test paketinin oluşturulması JUnit 5 JUnit 4'tekine oldukça benziyor. Peki o zaman fark nerede?
# 1) İçinde JUnit 4 , bir test paketinin oluşturulmasını desteklemek için @RunWith annotation'a bir parametre olarak iletilen Suite.class'a sahibiz. JUnit 5 @RunWith annotation ile aynı ama input parametresini kullanır JUnitPlatform.class onun yerine Suite.class .
Dolayısıyla, JUnit 5'teki kod satırı şöyle görünür: @RunWith (JUnitPlatform.class). Bu, JUnit Platform alt projeniz ile birlikte paketlenmiş olarak gelen açıklamadır.
#iki) İçinde JUnit 4 , kullanırız @Evleneceksen içinde virgülle ayrılmış birden çok JUnit sınıfını gruplamak için JUnit 5 sahibiz:
- Ek açıklama @SelectClasses bu eşdeğerdir @Evleneceksen JUnit 4'te birden çok JUnit sınıfını gruplandırmak için.
- @SelectPackages ek açıklama, paketlerden birden çok testi gruplamak için kullanılır. Dahil etmek istediğiniz paketi temsil eden bir dizi değeri girmeniz gerekir.
Yani başka bir deyişle,
- Test senaryolarını tek bir pakette gruplamak isterseniz, JUnit 5 bunu yapmanızı sağlar.
- Veya, birden fazla paketten test senaryolarını gruplamak isterseniz, JUnit 5 bunu yapmanızı da destekler. Burada hatırlanması gereken bir not, söz konusu paketin tüm alt paketleri altındaki testlerin de varsayılan olarak test paketine dahil edilmesidir.
JUnit 5: Farklı Senaryolar / Örnekler
Birden Çok Test Sınıfını Gruplandıran Bir Test Paketi Oluşturma
Kod pasajı aşağıda gösterilmiştir:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Tek Paket İçin Test Paketi Oluşturma
Kod pasajı aşağıda gösterilmiştir:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Not :
- Söyle demo.tests pakette alt paket var demo.tests.subtests.
- Kod @SelectPackages ({“demo.tests“}) alt paket altındaki tüm testleri de test paketine dahil edecek; varsayılan olarak.
- Eğer belirtmiş olsaydın @SelectPackages ({“demo.tests.subtests“}) alt paket altındaki test durumları demo.tests.subtests yalnızca test paketine dahil edilirken, ana paketindeki testler, örn. demo.tests dahil edilmeyecektir.
Birden Çok Paket İçin Bir Test Paketi Oluşturma
İçin bir test paketi oluşturmak için kod parçacığı çoklu paketler JUnit 5'te virgülle ayrılmış - aşağıda gösterildiği gibi görünecektir:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Filtreleme Test Paketi - JUnit 4 - JUnit 5
Bazen test senaryolarını filtrelememiz ve ihtiyaçlarımıza göre belirli bir dizi test gerçekleştirmemiz gerekir. Örneğin, regresyon testi için tanımlanan bir dizi test, birim testi için ayrı bir set ve duman testi için ayrı bir test senaryosu olabilir.
Test senaryolarını belirli paketlerden, sınıflardan veya kategorilerden hariç tutmamız veya dahil etmemiz gerekir. Tek bir paketten testleri filtrelemek veya etiketlemek JUnit4 ile tek seçenektir.
JUnit 4 ile karşılaştırıldığında, JUnit 5, değişen gereksinimlerinize göre test senaryolarınızı tek paketten veya birden çok paket ve alt paketten filtreleme ihtiyacını destekleyen iyi bir özellik seti ile birlikte gelir.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
JUnit 4'teki test senaryoları farklı kategorilere ayrılabilir. Test paketinizi çalıştırırken bu kategoriler hariç tutulabilir veya dahil edilebilir. Ek açıklamalar @Category, @IncludeCategory ve @ExcludeCategory JUnit 4.12 ve üzeri tarafından desteklenmektedir.
Kategori veya kategorilere göre filtre oluşturmanın üst düzey adımları aşağıdaki gibidir:
# 1) Kategoride rol oynayan bir işaretçi Arayüzü oluşturun.
#iki) SuiteClass sınıflarına dahil edilecek sınıfların test yöntemlerini aşağıdaki şekilde not edin: @Kategori ve kategori adı.
# 3) Test paketi dosyasında ek açıklama kullanın @IncludeCategory belirli bir kategoriye ait testleri dahil etmek için kategori adı ile.
# 4) Test paketi dosyasında ek açıklama kullanın @Evleneceksen onları hariç tutmak için kategori adı ile.
# 5) @Category ek açıklaması test düzeyinde veya sınıf düzeyinde de kullanılabilir. Ek açıklama test düzeyinde uygulanırsa, o belirli test verilen kategoriyle etiketlenirken, not sınıf düzeyinde ise sınıftaki tüm testler belirtilen kategoriye göre etiketlenir.
Testleri kategorize etmenin ve yürütmek için filtrelemenin pratik uygulamasını anlamak için biraz daha ayrıntıya bakalım:
Aşama 1:
Bir yaratılışla başlayacağız işaret arayüzü rolünü oynayacak test yöntemleri kategorisi. Burada adında bir kategori oluşturuyoruz Ünite testi . Kod çok basit. Lütfen aşağıdaki koda bakın.
UnitTest.java için kod
package demo.tests; public interface UnitTest {}
Adım 2:
Kategoriyi şurada işaretleyeceğiz: test yöntemi seviyesi sınıfta JUnitTestCase1.java . JunitMethod1 () test senaryosunu UnitTest kategorisine eklemek için, test yöntemini şu şekilde açıklamalıyız: @Kategori (UnitTest.class) .
Bu, test yöntemini UnitTest kategorisine ekler. Diğer test yöntemleri (varsa), yöntemler bir kategori ile açıklanmadıkça kategoriye etiketlenmez.
Kodumuzda @Kategori ek açıklamasının çalışması için paketi içe aktarmamız gerekiyor org.junit.experimental.categories.Category
JUnitTestCase1.java'daki kod pasajı:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Alternatif olarak, bir test yöntemi de birden fazla kategoriye ait olabilir Örneğin. : @Kategori (UnitTest.class, SmokeTest.class)
Aşama 3:
Şimdi kategoriyi işaretlerdim sınıf düzeyinde sınıfta JUnitTestCase2.java . Önceki adımda test yöntemi düzeyinde eklenen aynı ifade, geçerli sınıf dosyasına da eklenecektir.
Burada ifadeyi sınıf düzeyinde ekleyeceğimizi unutmayın. Bunu yapmak dosyadaki tüm test yöntemlerinin Ünite testi Kategori.
JUnitTestCase2.java'daki kod pasajı:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
4. Adım:
daha taze olanlar için java mülakat programları pdf
Artık gerekli test durumlarımız UnitTest kategorisine ayrıldığına göre, kategoriye göre filtreleyerek bunları test paketine nasıl ekleyeceğimizi şimdi göreceğiz. Bazı kod değişiklikleri yapacağız. JUnitTestSuite.class bunu göstermek için.
- Categories.class @RunWith ek açıklamasına parametre olarak aktarılır.
- @ Suite.SuiteClasses test sınıfları string dizisini alacaktır.
- Ek açıklama @ Categories.IncludeCategory parametre olarak UnitTest.class gerekir.
- Bu ifade, tüm paketi filtrelememize ve yalnızca kategoriye ait olan paketin test durumlarını çalıştırmamıza yardımcı olacaktır.
- Categories.class pakete ihtiyaç duyar org.junit.experimental.categories.Categories ithal edilecek.
JunitTestSuite.java için kod pasajı
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
Ek açıklama @ Categories.IncludeCategory olarak da yazılabilir @IncludeCategory. Ayrıca, birden çok arayüz (kategori) oluşturabilir ve sınıf / test yöntemlerine virgülle ayrılmış birden çok kategori ile açıklama ekleyebilirsiniz. Aşağıdaki örnek, kategori - Kategori1 ve Kategori2'ye ait testleri filtreleyecektir.
Misal: @IncludeCategory ({Category1.class, Category2.class})
Benzer kurallar geçerlidir @ Categories.ExcludeCategory / @Evleneceksen Test çalıştırması sırasında kategori veya kategoriler altındaki test yöntemlerini hariç tutmak.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
JUnit 5, test senaryolarını düzenlemek ve filtrelemek için birden fazla yaklaşımla birlikte gelir.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) JUnit 4'ün, yürütme için test durumlarını filtrelemeyi desteklemek için @IncludeCategory ve @ExcludeCategory ek açıklamaları olduğu gibi.
#iki) JUnit 5, aynı amaca ulaşmak için @IncludeTags ve @ExcludeTags ek açıklamalarına sahiptir.
# 3) JUnit 4, test senaryolarının belirli bir kategori altında organize edilmesi anlamına gelirken, JUnit 5, test senaryolarını yürütme için filtrelemeyi etkinleştirmek için test olaylarını belirli bir etiketle etiketlemeyi ifade eder.
Etiketleri temel alan filtreleri oluşturmanın üst düzey adımları aşağıdaki gibidir:
- @SelectPackages'a dahil edilecek paketlerin test yöntemlerini şu şekilde not edin: @Etiket ve kullanıcı tanımlı etiket adı. Bir sınıf, farklı test yöntemleri için farklı etiketlere sahip olabilir.
- Ayrıca sınıftaki tüm testlerin etiketlenmesi için sınıf düzeyinde @Tag'e de açıklama ekleyebilirsiniz.
- Test paketi dosyasında ek açıklama kullanın @Evleneceksen belirli bir etikete ait testleri içerecek etiket adı ile.
- Test paketi dosyasında ek açıklama kullanın @Evleneceksen Test paketinden hariç tutmak için etiket adı ile.
Şimdi JUnit 5'te filtrelemenin pratik olarak nasıl uygulanacağına dair ayrıntılı bir resme sahip olalım.
Aşama 1 : JUnit5TestCase1.java'daki bir test yöntemini 'Regression' Etiket adıyla etiketliyoruz
JUnit5TestCase1.java'daki kod pasajı:
@Tag(“Regression”) @Test public void junitMethod1(){
Adım 2 : JUnit5TestCase2.java'daki bir test yöntemini 'SmokeTest' Etiket Adıyla etiketliyoruz.
JUnit5TestCase2.java'daki kod pasajı:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Aşama 3: Artık test yöntemleri etiketlendiğine göre, testler için etiketlere göre uygun filtreler eklemek için şimdi JUnit5TestSuite.java'yı güncelleyeceğiz. Aşağıdaki kod, 'Regresyon' olarak etiketlenen tüm testleri içerir ve 'SmokeTest' olarak etiketlenenleri hariç tutar.
JUnit5TestSuite.java'daki kod pasajı:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Bir paket adı geçtiğimizde @SelectPackages ek açıklama, paketin alt paketlerindeki testler de test paketine eklenir.
Test paketimize dahil etmek istediğimiz bazı alt paketler olabilirken, paketimize dahil edilmesini istemediğimiz veya alakalı olmayabilecek birkaç başka alt paket olabilir.
Bu, ek açıklamalar aracılığıyla kolaylaştırılmıştır @IncludePackages ve @ExcludePackages JUnit 5'te.
Aşağıdaki paketlerin her birinde test sınıflarıyla birlikte alt paket1, alt paket2 ve alt paket 3 gibi üç alt pakete sahip bir 'demo.tests' paketimiz olduğunu varsayalım.
Bir paketi nasıl dahil edeceğinizi ve hariç tutacağınızı görselleştirmek için JUnit5TestSuite.java'nın bir kod pasajını görelim.
Senaryo 1: Yalnızca alt paket1'den test olaylarını dahil etmek için filtre uygulayın.
Aşağıdaki kod, demo.tests.subpackage1 paketindeki tüm JUnit sınıflarından tüm testleri içerir, ancak, doğrudan demo.test paketi ve paket alt paketi2 ve alt paket3 altındaki tüm testleri hariç tutar.
JUnit5TestSuite.java'daki kod pasajı:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Senaryo 2: Test olaylarını yalnızca paket alt paketinden hariç tutmak için filtre uygulayın3.
Aşağıdaki kod, paketteki JUnit sınıflarından tüm testleri hariç tutar - demo.tests.subpackage3 ancak paket, tüm testleri doğrudan demo.test paketi ve paket alt paketi1 ve alt paket2 altındaki testleri içerir.
JUnit5TestSuite.java'daki kod pasajı:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Paketteki belirli bir normal ifadeyle eşleşen belirli sınıfları dahil etmek veya hariç tutmak istediğinizde, @ IncludeClassNamePatterns ve @ ExcludeClassnamePatterns test paketi sınıf dosyasında kullanılabilir.
Şimdi resme aşağıdaki kod güncellemesiyle bakalım JUnit5TestSuite.java
Senaryo 1:
Aşağıdaki kod, demo.tests paketindeki 'Ctests' ile biten sınıfları içerir.
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Senaryo 2:
Şimdi bu sınıfları dışlayacağız başlatmak paket demo.testlerinden 'STest' ile
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Senaryo 3:
Birden çok normal ifade de filtre kriteri olarak geçirilebilir. Aşağıdaki kod, 'ile ayrılmış iki farklı normal ifadeyi belirtir. VEYA ' Şebeke. Yarık çubuk | burada OR operatörüdür.
yazılım testinde qa ve qc arasındaki fark
Kod, sınıfları filtreler başlatma ile Ölçek ( Ölçek.*) veya bitirme ile Testler (*. Testler?) ve @IncludeClassNamePatterns ek açıklaması kullanıldığı için test paketindeki bu sınıfları içerir.
Not: Tam nitelikli sınıf adı en az bir örüntüyle eşleşirse, sınıf @IncludeClassNamePatterns veya @ExcludeClassNamePatterns ek açıklamasına göre getirilir.
@RunWith (JUnitPlatform.class)
@SelectPackages ({“demo.tests“})
@IncludeClassNamePatterns (. * Testler?) $ ”)
JUnit Filtreleme Testi Durumları Hakkında SSS
İşte bir süredir aklınızda kalmış olabilecek bir soru.
S # 1) Bir testi devre dışı bırakmak / yok saymak ile testi filtrelemek arasındaki fark nedir? Özelliklerin herhangi biri, yürütme sırasında test olaylarını atlamakla aynı amaca hizmet edemez mi?
Cevap: Soru gerçekten gerçek ve cevaplanmaya değer.
- Filtreleme testi özelliği ile, hariç tutmanın yanı sıra Dahil etmek etiketli kategoriye bağlı olarak testler. Oysa, devre dışı bırakarak, yalnızca yürütme için testleri hariç tutmaya ve dahil etmeme kararını verebilirsiniz.
- Test senaryolarının filtrelenmesi bir tür koşullu olarak test senaryosunun atlanmasıdır, oysa Yoksayılan testlerde bunlar koşulsuz olarak atlanır.
- İkisi arasındaki bir diğer önemli fark, test senaryolarını @Ignore veya @Disabled ile açıklamalı testlerle çalıştırdığınızda, göz ardı edilen testlerin aşağıdaki test sonuçlarında gösterilmesidir. ATLANMIŞ Miktar
- Filtrelenmiş testleri çalıştırdığınızda, test sonucunda hiç görünmezler.
Sonuç
Bu eğitimde, testlere bir kategori / etiket ekleyerek testleri nasıl filtreleyeceğimizi öğrendik.
JUnit 4'te test olaylarını filtrelemek için @Category, @IncludeCategory ve @ExcludeCategory, JUnit 5'te @IncludeTags ve @ExcludeTags bulunduğunu öğrendik.
Ayrıca JUnit 5, @IncludePackages, @ExcludePackages açıklamalarını kullanan ek filtreleme seçeneklerine ve ayrıca sınıf adı desenlerini kullanarak sınıfları dahil etmek veya hariç tutmak için ek açıklamalara sahiptir. Daha fazlasını keşfediyoruz; Henüz keşfedilecek çok şey olduğunun farkındayız.
=> Basit JUnit Eğitim Serisine Buradan Dikkat Edin.
Önerilen Kaynaklar
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Testleri: Örneklerle JUnit Test Durumları Nasıl Yazılır
- JUnit Ek Açıklamalarının Listesi: JUnit 4 Vs JUnit 5
- Yeni Başlayanlar İçin JUnit Eğitimi - JUnit Testi Nedir?
- JUnit Test Fikstürü Nedir: JUnit 4 Örnekleriyle Eğitim
- JUnit Testlerini Yürütmenin Birden Çok Yolu
- Eclipse'de JUnit'i İndirin, Kurun ve Yapılandırın
- JUnit Framework'e Giriş ve Selenium Script'te Kullanımı - Selenium Tutorial # 11