Jika kode saya berisi cacat yang diketahui yang harus diperbaiki, tetapi belum, dan tidak akan diperbaiki untuk rilis saat ini, dan mungkin tidak diperbaiki dalam waktu dekat, haruskah ada unit test gagal untuk bug di kamar uji? Jika saya menambahkan tes unit, itu akan (jelas) gagal, dan membiasakan diri dengan tes gagal sepertinya ide yang buruk. Di sisi lain, jika itu adalah cacat yang diketahui, dan ada kasus gagal yang diketahui, tampaknya aneh untuk tetap keluar dari ruang uji, karena pada titik tertentu harus diperbaiki, dan tes sudah tersedia.
unit-testing
tdd
Martijn
sumber
sumber
Jawaban:
Jawabannya adalah ya, Anda harus menulisnya dan menjalankannya.
Kerangka kerja pengujian Anda memerlukan kategori "tes gagal yang diketahui" dan Anda harus menandai tes ini sebagai bagian dari kategori itu. Bagaimana Anda melakukannya tergantung pada framework.
Anehnya, tes gagal yang tiba-tiba lulus bisa sama menariknya dengan tes lulus yang tiba-tiba gagal.
sumber
Saya pikir Anda harus memiliki unit test dengan perilaku saat ini dan di komentar, tambahkan tes yang tepat dan perilaku yang benar. Contoh:
Dengan cara ini, ketika perbaikan tersedia, build akan gagal, memperhatikan Anda tes yang gagal. Ketika Anda akan melihat tes, Anda akan tahu bahwa Anda mengubah perilaku dan tes harus diperbarui.
EDIT: Seperti yang dikatakan Kapten Man, dalam proyek-proyek besar, ini tidak akan diperbaiki dalam waktu dekat tetapi demi dokumentasi, jawaban aslinya lebih baik daripada tidak sama sekali.
Cara yang lebih baik untuk melakukannya adalah menduplikasi tes saat ini, membuat klon menyatakan hal yang benar dan
@Ignore
dengan pesan, misalnyaIni disertai dengan konvensi dalam tim Anda untuk mengurangi jumlah
@Ignore
tes d. Cara yang sama yang akan Anda lakukan dengan memperkenalkan atau mengubah tes untuk mencerminkan bug, kecuali Anda tidak gagal membangun jika ini sangat penting untuk tim Anda, seperti OP mengatakan bahwa perbaikan bug tidak akan dimasukkan dalam rilis saat ini .sumber
@Ignore
pendekatannya. Alasan menggunakan hanya komentar sepertinya bukan ide yang baik bagi saya adalah karena saya tidak berpikir orang akan sering membuka unit test untuk memeriksanya (kecuali jika mereka gagal, atau (semoga) ketika mereka bertanya-tanya mengapa ada sesuatu yang diabaikan ).@Ignore
pendekatannya. Alasan menggunakan hanya komentar sepertinya bukan ide yang baik bagi saya adalah karena saya tidak berpikir orang akan sering membuka unit test untuk memeriksanya (kecuali jika mereka gagal, atau (mudah-mudahan) ketika mereka bertanya-tanya mengapa ada sesuatu yang dilompati ).Bergantung pada alat tes Anda dapat menggunakan
omit
ataupend
fungsi.Contoh dalam ruby:
The
omit
perintah melompat tes, yangomit_if
menggabungkan dengan tes - dalam contoh saya saya uji nomor versi dan melaksanakan tes hanya untuk versi mana saya berharap kesalahan dipecahkan.Output dari contoh saya adalah:
Jadi jawaban saya: Ya, laksanakan tes. Tapi jangan bingung penguji dengan kesalahan, di mana Anda tahu itu akan gagal.
sumber
Jika bug itu segar di pikiran Anda dan Anda punya waktu untuk menulis tes unit sekarang, maka saya akan menulisnya sekarang dan memberi tanda sebagai kegagalan yang diketahui sehingga tidak membuat build itu sendiri. Pelacak bug Anda harus diperbarui untuk mencerminkan bahwa ada unit test yang saat ini gagal untuk bug ini sehingga orang yang ditugaskan untuk memperbaikinya akhirnya tidak menulisnya lagi. Ini mengandaikan bahwa kode kereta tidak perlu banyak refactoring dan bahwa API berubah secara signifikan - jika itu masalahnya maka Anda mungkin lebih baik tidak menulis tes unit sampai Anda memiliki ide yang lebih baik tentang bagaimana tes harus ditulis .
sumber
Jawabannya adalah TIDAK. Anda tidak boleh menambahkan unit test untuk bug sampai Anda mulai mengerjakan perbaikan untuk bug dan daripada Anda akan menulis tes yang membuktikan bug dan ketika tes itu gagal sesuai dengan laporan bug ( s) Anda akan pergi dan memperbaiki kode aktual untuk membuat tes lulus dan bug akan dipecahkan dan akan dibahas setelah itu.
Di dunia saya, kami akan memiliki kasus uji manual bahwa QE gagal sampai bug diperbaiki. Dan kami sebagai pengembang akan menyadarinya melalui manual gagal TC dan melalui pelacak bug.
Alasan untuk tidak menambahkan UT yang gagal adalah sederhana. UT adalah untuk umpan balik langsung dan validasi dari apa yang saya sebagai pengembang saat ini bekerja. Dan UT digunakan dalam sistem CI untuk memastikan saya tidak merusak sesuatu secara tidak sengaja di beberapa area kode untuk modul itu. Memiliki UT gagal secara sengaja untuk IMHO bug yang tahu akan menjadi kontra produktif dan hanya salah.
sumber
Saya kira jawabannya adalah, itu tergantung. Pragmatis tentang hal itu. Apa yang membuat Anda menulis sekarang? Mungkin itu segar di pikiran Anda?
Saat memperbaiki bug, masuk akal untuk membuktikannya ada dengan menulis unit test yang mengekspos bug. Anda kemudian memperbaiki bug, dan unit test harus lulus.
Apakah Anda punya waktu untuk menulis tes unit gagal sekarang? Apakah ada lebih banyak fitur mendesak atau bug yang perlu ditulis / diperbaiki.
Dengan asumsi Anda memiliki perangkat lunak pelacakan bug yang kompeten dengan bug yang masuk, sebenarnya tidak perlu menulis unit test yang gagal sekarang .
Mungkin Anda dapat menimbulkan beberapa kebingungan jika Anda memperkenalkan tes unit gagal sebelum rilis yang terjadi tanpa perbaikan bug.
sumber
Saya biasanya merasa tidak nyaman tentang kegagalan yang diketahui dalam ruang tes, karena terlalu mudah bagi daftar untuk tumbuh dari waktu ke waktu, atau untuk kegagalan yang tidak terkait dalam tes yang sama diberhentikan sebagai "diharapkan". Hal yang sama berlaku untuk kegagalan intermiten - mungkin ada sesuatu yang jahat mengintai kode. Saya akan memilih untuk menulis tes untuk kode seperti sekarang, dan sebagaimana seharusnya setelah itu diperbaiki tetapi berkomentar atau dinonaktifkan entah bagaimana.
sumber