Bagaimana cara menjalankan pengujian JUnit dengan Gradle?

98

Saat ini saya memiliki file build.gradle berikut :

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


Ini build.gradle file untuk repositori saya di sini . Semua file utama saya ada di src / model / dan pengujiannya masing-masing ada di test / model .

Bagaimana cara menambahkan dependensi JUnit 4 dengan benar dan kemudian menjalankan tes tersebut di folder tes / model ?

Wang-Zhao-Liu QM
sumber

Jawaban:

106

Bagaimana cara menambahkan ketergantungan junit 4 dengan benar?

Dengan asumsi Anda menyelesaikan dengan repo Maven standar (atau setara):

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}

Jalankan tes tersebut di folder tes / model?

Anda menentukan set sumber pengujian dengan cara yang sama:

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}

Kemudian jalankan tes sebagai:

./gradlew test

EDIT: Jika Anda menggunakan JUnit 5, ada lebih banyak langkah yang harus diselesaikan, Anda harus mengikuti tutorial ini .

Oliver Charlesworth
sumber
8
srcDirs = ["test/model"]sedikit lebih tepat karena menghapus direktori sumber pengujian default, sementara srcDir "test/model"menambahkan direktori lain. Sama untuk mainset sumber.
Peter Niederwieser
49

Jika Anda menyiapkan proyek Anda dengan struktur paket gradle default, yaitu:

src/main/java
src/main/resources
src/test/java
src/test/resources

maka Anda tidak perlu memodifikasi sourceSets untuk menjalankan pengujian Anda. Gradle akan mengetahui bahwa kelas pengujian dan resource Anda ada di src / test. Anda kemudian dapat menjalankan seperti yang dikatakan Oliver di atas. Satu hal yang perlu diperhatikan: Berhati-hatilah saat menyetel file properti dan menjalankan kelas pengujian dengan gradle dan IDE Anda. Saya menggunakan Eclipse, dan saat menjalankan JUnit darinya, Eclipse memilih satu classpath (direktori bin) sedangkan gradle memilih yang lain (direktori build). Hal ini dapat menimbulkan kebingungan jika Anda mengedit file sumber daya, dan tidak melihat perubahan Anda tercermin pada waktu proses pengujian.

DivDiff
sumber
2
Untuk mengarahkan file build Eclipse ke direktori yang sama dengan Gradle (dapat mencegah beberapa error yang membuat frustrasi): Project -> Properties -> Java build path -> Folder output default: ganti "bin" dengan "build". Namun ... dalam pengalaman saya ini tampaknya memiliki kebiasaan membingungkan "tergelincir kembali" ke default "bin" sesekali tidak terduga. Akan menyenangkan mengetahui apakah ada cara agar Eclipse menggunakan "build" secara default.
mike rodent
2
@ mike-rodent sejauh yang saya tahu secara eksplisit tidak disarankan untuk berbagi jalur pembuatan yang sama untuk gerhana dan gradle (lihat misalnya, diskusikan.gradle.org/t/… )
mtraut
OK, saya berdiri dikoreksi! ... dan saya kira tidak ada yang bisa diperoleh dari kompilasi ke direktori yang sama. Untuk sebagian besar tujuan, fungsionalitas pembuat gerhana menjadi alat validasi belaka: "ups, ini tidak dapat dikompilasi karena x, y, dan z".
mike rodent
1
@DivDiff Struktur folder src saya diatur dengan cara yang sama yang disebutkan di atas, tetapi masih ketika saya melakukan tes gradle, itu tidak melakukan apa-apa. Itu tidak menjalankan tes saya sama sekali. Ada ide?
Gaurav
@Gaurav, saya mengundang Anda ke ruang obrolan sehingga kita dapat membicarakannya secara offline.
DivDiff
15

Jika Anda membuat proyek Anda dengan Spring Initializr , semuanya harus dikonfigurasi dengan benar dan yang perlu Anda lakukan hanyalah menjalankan ...

./gradlew clean test --info
  • Jatuhkan --infojika Anda tidak ingin melihat hasil pengujian.
  • Jatuhkan cleanjika Anda tidak ingin menjalankan kembali pengujian yang telah berlalu sejak perubahan terakhir.

Dependensi yang diperlukan build.gradleuntuk pengujian di Spring Boot ...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

Untuk beberapa alasan, runner pengujian tidak memberi tahu Anda hal ini, tetapi menghasilkan laporan HTML dalam bahasa build/reports/tests/test/index.html.

Brent Bradburn
sumber
0

testCompile tidak digunakan lagi. Kompatibel dengan Gradle 7:

dependencies {
...
   testImplementation 'junit:junit:4.13'
}

dan jika Anda menggunakan struktur folder default (src / test / java / ...), bagian pengujiannya adalah:

test {
    useJUnit()
}

Akhirnya:

gradlew clean test

Lihat juga: https://docs.gradle.org/current/userguide/java_testing.html

rob2universe
sumber