Ini baru-baru ini menjadi topik di postingan blog Gradle, Berhenti mengulang tes Anda . The Penulis menunjukkan contoh menggunakan outputs.upToDateWhen { false }
dan menjelaskan mengapa itu salah:
Ini sebenarnya tidak memaksa tayangan ulang
Apa yang mungkin ingin dikatakan oleh penulis cuplikan ini adalah "Selalu jalankan kembali tes saya". Tapi bukan itu yang dilakukan cuplikan ini. Itu hanya akan menandai tugas yang kedaluwarsa, memaksa Gradle untuk membuat ulang output. Tapi ada satu hal, jika build cache diaktifkan, Gradle tidak perlu menjalankan tugas untuk menciptakan kembali output. Ini akan menemukan entri dalam cache dan membongkar hasilnya ke direktori output tes.
Hal yang sama berlaku untuk cuplikan ini:
test.dependsOn cleanTest
Gradle akan membongkar hasil tes dari cache build setelah output telah dibersihkan, jadi tidak ada yang akan dijalankan kembali. Singkatnya, cuplikan ini menciptakan no-op yang sangat mahal.
Jika Anda sekarang berpikir "Oke, saya juga akan menonaktifkan cache", izinkan saya memberi tahu Anda alasannya.
Kemudian, penulis melanjutkan untuk menjelaskan mengapa menjalankan kembali beberapa tes adalah buang-buang waktu:
Sebagian besar pengujian Anda harus bersifat deterministik, yaitu dengan memberikan input yang sama, mereka harus menghasilkan hasil yang sama.
Dalam beberapa kasus di mana Anda ingin menjalankan kembali tes di mana kode tidak berubah, Anda harus memodelkannya sebagai input. Berikut adalah kedua contoh dari posting blog yang menunjukkan penambahan input sehingga tugas akan menggunakannya selama pemeriksaan terbaru.
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
Saya sarankan membaca seluruh posting blog.