Saya tahu bahwa satu tes dapat dijalankan dengan menjalankan, di sbt,
testOnly *class -- -n Tag
Apakah ada cara untuk memberitahu sbt / scalatest untuk menjalankan tes tunggal tanpa tag? Sebagai contoh:
testOnly *class -- -X 2
itu berarti "jalankan tes kedua di kelas. Apa pun itu". Kami memiliki banyak tes dan tidak ada yang mau memberi tag pada mereka, jadi apakah ada cara untuk menjalankan tes tunggal tanpa memiliki tag?
sbt
tanda kutip , misalnyasbt "test-only *SingleTestSuite"
Jawaban:
Ini sekarang didukung (sejak ScalaTest 2.1.3) dalam mode interaktif:
untuk menjalankan hanya tes yang namanya termasuk "foo" substring.
Untuk pencocokan tepat daripada substring, gunakan
-t
sebagai ganti-z
.sumber
-t
untuk pencocokan tepat? Saya tidak bisa membuatnya bekerja.src/it
), mereka harusit
melakukannyatestOnly
. Misalnya, pada baris perintah:sbt "it:testOnly *MyIntegrationTestSuite"
.when
danshould
dapat mengulangi antara tes. Untuk memilih satu tes khusus saya perlu mengatakan "nama berisi ini DAN itu".Saya ingin menambahkan contoh konkret untuk menyertai jawaban lainnya
Anda perlu menentukan nama kelas yang ingin Anda uji, jadi jika Anda memiliki proyek berikut (ini adalah proyek Play):
Anda dapat menguji hanya
Login
tes dengan menjalankan perintah berikut dari konsol SBT:Jika Anda menjalankan perintah dari luar konsol SBT, Anda akan melakukan hal berikut:
sumber
sbt "test:testOnly *LoginServiceSpec"
testOnly *LoginServiceSpec
dan di luar:sbt "testOnly *LoginServiceSpec"
Saya tidak melihat cara untuk menjalankan satu tes tanpa tanda dalam kelas uji tetapi saya memberikan alur kerja saya karena tampaknya berguna bagi siapa saja yang mengalami pertanyaan ini.
Dari dalam sesi sbt:
(Tanda bintang adalah wildcard, Anda dapat menentukan path lengkap
com.example.specs.YourTestClass
.)Semua tes dalam kelas tes itu akan dieksekusi. Agaknya Anda yang paling khawatir dengan tes gagal, jadi koreksi implementasi yang gagal dan kemudian jalankan:
... yang hanya akan menjalankan tes yang gagal. (Mengulangi perintah yang paling baru dieksekusi
test:testOnly
akan sama dengantest:testQuick
dalam kasus ini, tetapi jika Anda memecah metode pengujian Anda menjadi kelas tes yang sesuai, Anda dapat menggunakan wildcard untuk membuattest:testQuick
cara yang lebih efisien untuk menjalankan kembali tes gagal.)Perhatikan bahwa nomenklatur untuk pengujian di ScalaTest adalah kelas uji, bukan metode pengujian khusus, jadi semua metode yang tidak ditandai dijalankan.
Jika Anda memiliki terlalu banyak metode pengujian dalam kelas uji, bagi mereka menjadi beberapa kelas yang terpisah atau beri tag dengan benar. (Ini bisa menjadi sinyal bahwa kelas yang diuji melanggar prinsip tanggung jawab tunggal dan dapat menggunakan refactoring.)
sumber
*YourTestClass
harus nama kelas. Bukan nama file.Hanya untuk menyederhanakan contoh Tyler.
test:
-prefix tidak diperlukan.Jadi menurut contohnya:
Dalam
sbt
-console:Dan di terminal:
sumber
Inilah halaman Scalatest tentang menggunakan pelari dan diskusi panjang tentang opsi
-t
dan-z
.Posting ini menunjukkan perintah apa yang berfungsi untuk file uji yang menggunakan
FunSpec
.Inilah file tesnya:
Perintah ini menjalankan empat tes di
iLike
blok uraian (dari baris perintah SBT):Anda juga dapat menggunakan tanda kutip, jadi ini juga akan berfungsi:
Ini akan menjalankan tes tunggal:
Ini akan menjalankan dua tes yang dimulai dengan "bekerja dengan":
Saya tidak bisa mendapatkan
-t
opsi untuk menjalankan tes apa pun diCardiBSpec
file. Perintah ini tidak menjalankan tes apa pun:Sepertinya
-t
opsi berfungsi ketika tes tidak bersarang didescribe
blok. Mari kita lihat file tes lain:-t
dapat digunakan untuk menjalankan tes tunggal:-z
juga dapat digunakan untuk menjalankan tes tunggal:Lihat repo ini jika Anda ingin menjalankan contoh-contoh ini.
sumber