JUnit5 ile Parameterized Test

0 199

Bu yazımızda unit testlerimizi daha efektif hale getirmeye çalışacağız. Peki neden? Çünkü testlerimizi yazarken muhtemelen fark ettiğiniz bir problem var.

Bazı durumlarda test methodumuzun işlevi aynı kalmasını istiyoruz ama farklı değerler çalışmasını istiyoruz. Bu sorunu test methodlarımızı çoklayarak da yapabiliriz.

Fakat neden kod tekrarı yapalım ki? Ayrıca proje kodlarına değer verdiğimiz kadar test kodlarımıza da değer vermeliyiz. Unutmamalıyız ki test methodlarımız ayrıca bizler için

dokümantasyon da sağlar. Bilmediğimiz bir methodun nasıl davrandığını test methodlarından çok daha iyi anlayabiliriz.

Parameterized Tests

Parametreli testler, bir testi farklı argümanlarla birden çok kez çalıştırmanızı sağlar. @Test metodları gibi tanımlanan ancak @ParameterizedTest annotasyonu kullanılan bir JUnit özelliğidir. Ayrıca, her çağrı için argümanları sağlayacak en az bir parametre kaynağı(source) belirtmeniz ve test metodunda bu argümanları kullanmanız gerekir. Aksi halde parametreli test zaten olmaz.

Aşağıdaki örnek, @ValueSource annotasyonunu kullanarak bir dizi String’i argüman olarak belirleyen parametreli bir testi göstermektedir.

@ValueSource

Aşağıdaki tipler parametreli testler için parametre olarak verilebilir.

  • short
  • byte
  • int
  • long
  • float
  • double
  • char
  • boolean
  • java.lang.String
  • java.lang.Class

 

@NullSource & @EmptySource

 

@EnumSource

Enum değerlerini parametre vermek için kullanılır.

Örnek bir method üzerinden inceleyelim. Amacımız sadece test yazabilmek olduğu için methodumuz uydurma 🙂

UserType göre görevini yapan bir methodumuz var ve UserType.INDIVIDUAL, UserType.STUDENT enum değerlerine göre hata fırlatmasını bekliyoruz ve “PREMIUM”, “CORPORATE” değerleri geldiğinde ise görevini başarılı bir şekilde gerçekleştirmesini bekliyoruz.

@EnumSource ile value ve names değerlerini vermemiz gerekiyor. names alanı girmediğinizde enum içerisinde tanımlı bütün değerler ile testi çalıştırmaya çalışacaktır.

Fakat biz sadece belirlediğimiz değerlere göre çalışmasını istediğimiz için names ile değerlerimizi vermemiz gerekiyor.

 

@MethodSource

Parametreli testlere veri sağlamak için kullanılan bir annotation.

Başka bir class içinden test methodlarımıza aşağıdaki gibi parametre geçebiliriz.

 

@CsvSource

Diğer source annotation gibi testlerimize veri sağlamak için kullanılıyor. Adından da anlayabileceğimiz gibi csv dosyası formatında veriyi sağlayabilirisiniz.

Verileri virgüller ile ayırarak aşağıdaki gibi bir kullanım sağlanabilir.

 

@CsvFileSource

İlk olarak, test verilerimizi içeren bir CSV dosyası oluşturmalı ve bu dosyayı classpath’e koymalıyız. Oluşturulan CSV dosyasına test verilerini eklerken şu kurallara uymamız gerekiyor:

  • Bir satır, bir metod çağrısının tüm argümanlarını içermelidir.
  • Farklı argüman değerlerini virgülle ayırmalısınız.
  • Her satırdaki argüman değerlerinin sırasının, test metodunun parametreleriyle aynı olmasını sağlamalısınız.

 

Kaynak

 

Önceki test yazıları için aşağıdaki linklerden ulaşabilirsiniz.

 

Faydalı olması dileğiyle.

Email adresiniz yayınlanmayacaktır.