Bu, yakın zamanda Gradle'ın blog gönderisindeki konuydu Testlerinizi yeniden çalıştırmayı durdurun . Yazar kullanarak bir örnek gösterir outputs.upToDateWhen { false }
ve neden yanlış olduğunu açıklıyor:
Bu aslında yeniden gösterimleri zorlamaz
Bu pasajın yazarının muhtemelen söylemek istediği şey "Testlerimi her zaman yeniden çalıştır" dır. Bu pasajın yaptığı şey bu değil. Yalnızca görevi güncelliğini yitirmiş olarak işaretler ve Gradle'ı çıktıyı yeniden oluşturmaya zorlar . Ancak önemli olan şu ki, yapı önbelleği etkinse, Gradle'ın çıktıyı yeniden oluşturmak için görevi çalıştırması gerekmez. Önbellekte bir giriş bulacak ve sonucu testin çıktı dizinine açacaktır.
Aynısı bu pasaj için de geçerlidir:
test.dependsOn cleanTest
Gradle, çıktı temizlendikten sonra test sonuçlarını derleme önbelleğinden çıkarır, böylece hiçbir şey yeniden çalıştırılmaz. Kısacası, bu parçacıklar çok pahalı bir işlemsizlik yaratıyor.
Şimdi “Tamam, önbelleği de devre dışı bırakacağım” diye düşünüyorsanız, neden yapmamanız gerektiğini söyleyeyim.
Ardından yazar, bazı testleri tekrar yapmanın neden zaman kaybı olduğunu açıklamaya devam ediyor:
Testlerinizin büyük çoğunluğu deterministik olmalıdır, yani aynı girdiler verildiğinde, aynı sonucu vermeleri gerekir.
Kodun değişmediği testleri yeniden çalıştırmak istediğiniz birkaç durumda, bunları bir girdi olarak modellemelisiniz. Aşağıda, görevin güncel kontrolleri sırasında kullanması için girdi eklemeyi gösteren blog gönderisinden iki örnek verilmiştir.
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
Blog gönderisinin tamamını okumanızı tavsiye ederim.