JUnit Category(kategori) özelliği ile testlerimiz için kategoriler oluşturabiliriz. Test sırasında hangi kategorilerin teste dahil olup olmayacağına bu kategori tanımlarına göre karar verebiliriz. Kategorilendirmeler sınıf ve metot düzeyinde olabilir. Birden fazla kategori tanımı yapılabilir.
İlk olarak kategorilerimizi interface olarak oluşturuyoruz.
1 2 3 |
public interface FunctionalTest { } |
1 2 3 |
public interface PerformanceTest { } |
Aşağıda ClassA ve ClassB isminde 2 adet test sınıfımızı ve bu sınıflara ait test kategorilerini tanımladık.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class ClassA { @Test public void printA1(){ fail(); } @Category(PerformanceTest.class) @Test public void printA2(){ System.out.println("printA2 => PerformanceTest Category Method Level"); } } |
printA1 metodunda herhangi bir kategoriye dahil edilmediği için kategoriye göre testler çalıştırılırken değerlendiremye alınmayacaktır. printA2 metoduna ise metot düzeyinde kategori tanımlanmıştır(birden kategori tanımlanabilir). Bu kategori sınıfı PerformanceTest olarak belirtilmiştir.
1 2 3 4 5 6 7 8 9 |
@Category({FunctionalTest.class}) public class ClassB { @Test public void printB(){ System.out.println("printB => Class level category"); } } |
Yukarıda, kategori sınıf düzeyinde tanımlanmıştır(birden fazla kategori tanımlanabilir). Bu sınıfda ki tüm metotlar sınıfda tanımlanan kategoriye dahil edilmişlerdir. Bu metotlara farklı kategoriler tanımlamak isterseniz hata alırsınız.
1 2 3 4 5 6 |
@RunWith(Categories.class) @IncludeCategory(PerformanceTest.class) @SuiteClasses({ ClassA.class, ClassB.class }) public class PerformanceTestSuite { } |
1 |
printA2 => PerformanceTest Category Method Level |
Kategorilendirmelerin çalışması için test suite yazdık. @RunWith içersinde Caegories.class tanımı ile kategorilendirmelere göre çalışacağını tanımladık. IncludeCategory’de ise hangi kategoride ki testlerin çalıştırılacağını belirtik. Birden fazla kategoriyi buraya ekleyebiliriz. SuiteClasses ile hangi test sınıflarının çalıştırılacağını belirterek testimizi çalıştırdık ve yukarıda ki sonucu ekrana yazdırdık.
1 2 3 4 5 6 |
@RunWith(Categories.class) @ExcludeCategory(PerformanceTest.class) @SuiteClasses({ClassA.class, ClassB.class}) public class FunctionalTestSuite { } |
1 |
printB => Class level category |
Yukarıda benzer tanımları tekrardan yaptık. Farklı olarak ExcludeCategory tanımı yaptık. Burada yazılı olan sınıf/sınıfların bu test sürecinde çalıştırılmayacağını belirledik ve ekran çıktısını alarak kategoriye göre test yürütme işlemlerimizi başarıyla tamamladık.