2017-05-21 103 views
6

Gördüğüm dinamik testlerin neredeyse tamamı, parametrik testler kullanılarak tekrar işlenebilir ve yazılabilir. Yani, Dinamik testlerin tek seçenek olduğu veya en azından parametreli testlerden daha uygun olduğu pratik bir senaryo.Dinamik Testler, JUnit 5'deki Parametreli Testlerden nasıl farklıdır?

JUnit 5 belgelerinde yer alan tek "gerçek" dinamik test örneği pratik değildir.

Herhangi bir fikrin var mı?

+1

İyi soru. Dinamik testler olduğu için, özellikle de bir uzantı noktası tarafından desteklenmedikleri için açık bir uygulamaya sahip değildir (bkz. [# 371] (https://github.com/junit-team/junit5/issues/371)) . – Nicolai

+0

Yorumumuz için teşekkürler @Nicolai. Girdilerini okudum ve senin amacının ne olduğunu anladığımı düşünüyorum. Bununla birlikte, benim burada dinamik testler yaratmanın yolu, sadece dinamik testlerin özellikle faydalı olduğu durumları anlamak için değil. Uzantı destekli dinamik testin buna nasıl cevap vereceğinden emin değilim. Geliştiricilerin Dinamik testleri tanıtarak çözmeye çalıştıkları problemi bilmek isterim. – Yasin

+1

İkincisi ile ilgili olarak: Dinamik testler, parametrik testlerden çok önce oluşturuldu. Bunları dahil etmenin nedeni, araç üreticilerinin testlerin çalışma zamanında oluşturulabileceğinin farkında olduğundan emin olmaktı. Ah, şimdi hatırladım ki bir sebep [lambda testlerine] izin vermek oldu (https://blog.codefx.org/libraries/junit-5-dynamic-tests/#Lambda-Tests). – Nicolai

cevap

4

DynamicTest farklı olarak, ParameterizedTest çekirdek junit-jupiter-api bir parçası değildir ancak (3.12.1. Required Setup bakınız) junit-jupiter-params adlandırılan ayrı bir dışlayıcı bulunmaktadır. Bunun nedeni, JUnit 5'in temel ilkelerinden biri, "özellikler üzerinden uzantı noktalarını tercih etmektir" (Core Principles · junit-team/junit5 Wiki). JUnit Jupiter API'sı, JUnit Jupiter Params parametreli testlerin tanımlanması için daha yüksek düzeyli bir API tanımlarken, JUnit Jupiter API'sinin dinamik testlerin JUnit'e bir genişletme noktası olarak nasıl oluşturulacağını ve kaydedileceğini tanımlar. Teması şu anda "dinamik kapsayıcılar ve küçük API değişiklikleri" dir. Bu beklenen değişikliklerle, test geliştiricileri sadece dinamik testler oluşturamayacak, aynı zamanda dinamik test ağaçlarını (diğer dinamik kaplar ve/veya testler içeren dinamik kaplar) üretebilecekler, ki bu da şu anda paramterize edilmiş testlerle yapılamayacak bir şeydir. Bu, şartname benzeri testler oluşturmak için çok yararlı olduğunu kanıtlayacaktır. Kısaca, benim anladığım gibi, ilk olarak, temel düşük seviyeli API'lar (örneğin dinamik kaplar/testler) aracılığıyla temel uzantı noktalarını serbest bırakmak ve daha sonra 3. tarafları, bunları kaldıran uzantıları oluşturmak için yaratmak ve teşvik etmek (örneğin, parametrelendirilmiş) testleri).

+0

çalışma zamanında oluşturulabileceğini bilmesini sağlamak mümkün görünüyor. "Parametrik testler için destek, kaputun altındaki dinamik test API'sini kullanıyor" konusunu daha ayrıntılı olarak açıklayabilir misiniz? Anladığım kadarıyla dinamik testler yaşam döngüsü geri çağrılarını desteklemiyor, fakat parametreli testler yapıyor. Muhtemelen kaynak koduna bakmam gerekiyor mu? – Yasin

+0

@Yasin, parametreli testlerin kodunun _all_'ına aşina değilim ama her test vakasının ['TestExecutionListener.dynamicTestRegistered'] (http://junit.org/junit5/docs/current/api/org) olduğunu bildiğimi biliyorum /junit/platform/launcher/TestExecutionListener.html#dynamicTestRegistered-org.junit.platform.launcher.TestIdentifier-). – mfulton26

+2

Biraz daha düşündükten sonra bu ifade tamamen doğru gibi görünmüyor. Her iki API da aynı koda hükmeder ancak ilk başta düşündüğümden birbirinden daha bağımsız görünürler. – mfulton26