Katakanlah saya punya metode seperti ini:
public void OrderNewWidget(Widget widget)
{
if ((widget.PartNumber > 0) && (widget.PartAvailable))
{
WigdetOrderingService.OrderNewWidgetAsync(widget.PartNumber);
}
}
Saya memiliki beberapa metode seperti itu dalam kode saya (bagian depan ke panggilan Layanan Web async).
Saya berdebat apakah berguna untuk membuat mereka dilindungi dengan unit test. Ya ada logika di sini, tetapi itu hanya logika penjaga. (Artinya saya memastikan saya memiliki barang yang saya butuhkan sebelum saya mengizinkan panggilan layanan web terjadi.)
Sebagian dari saya mengatakan "yakin Anda dapat mengujinya, tetapi tidak sepadan dengan waktunya" (Saya sedang mengerjakan proyek yang sudah terlambat).
Tetapi sisi lain dari saya mengatakan, jika Anda tidak mengujinya, dan seseorang mengganti Pengawal, maka mungkin ada masalah.
Tetapi bagian pertama dari saya mengatakan kembali, jika seseorang mengganti penjaga, maka Anda hanya membuat lebih banyak pekerjaan untuk mereka (karena sekarang mereka harus mengubah penjaga dan unit tes untuk penjaga).
Misalnya, jika layanan saya memikul tanggung jawab untuk memeriksa ketersediaan Widget maka saya mungkin tidak ingin penjaga itu lagi. Jika sedang dalam uji unit, saya harus mengubah dua tempat sekarang.
Saya melihat pro dan kontra dalam kedua cara. Jadi saya pikir saya akan bertanya apa yang telah dilakukan orang lain.
sumber
but it is not worth the time" (I am on a project that is already behind schedule).
Kami adalah pengembang perangkat lunak. Satu-satunya waktu kami sesuai jadwal adalah ketika kami mati :)Jawaban:
Ini tiga tes yang sangat singkat. Anda menghabiskan banyak waktu bertanya pada diri sendiri pertanyaan itu.
Dengarkan sisi ini.
Jika pemelihara Anda adalah kacang TDD, Anda membuatnya lebih sulit untuk mereka. Setiap perubahan yang saya lakukan tanpa ada perubahan terkait atau penambahan tes menyebabkan saya harus berpikir keras. Bahkan, saya mungkin akan menambahkan tes sebelum saya melanjutkan dan membuat perubahan.
Bagian pertama dari Anda benar-benar salah. Berikan tepukan pada bagian kedua dan berhenti memikirkannya.
sumber
Ini akan menyederhanakan pengujian unit jika logika penjaga dan pemesanan aktual adalah metode yang terpisah.
Di
Widget
kelasatau metode yang setara di tempat lain
Metode pemesanan
Sekarang pengujian
IsWidgetReadyForOrdering
menjadi mudah. Jangan berpikir lama tentang itu lagi. Menguji!sumber
OrderNewWidget
ini mungkin berada di kelas lain daripadaWidget
, karena memilikiWidget
argumen. Karena metode ini tidak memiliki nilai balik, pengujian tidak jelas. Anda harus menyuntikkanWigdetOrderingService
-mock yang melacakOrderNewWidgetAsync
panggilan.Jika Anda tidak punya waktu dalam jadwal Anda untuk pengujian unit tetapi Anda punya waktu menyisihkan untuk penggunaan QA yang solid, maka tanyakan apakah Anda dapat mencuri waktu QA itu untuk menulis tes unit, atau jika Anda dapat menghabiskan beberapa periode QA melakukan tes unit, atau mungkin hanya berurusan dengan kode non-unit yang diuji .. Sayangnya jadwal yang tidak bergerak memaksa Anda untuk membuat konsesi atau bekerja sendiri sampai mati, saya biasanya menyarankan opsi pertama karena yang kedua akan mengakibatkan Anda tidak mampu mendukung / memelihara sistem dengan benar untuk jangka waktu itu.
Yang mengatakan, untuk pertanyaan umum Anda menguji pernyataan penjaga; Iya! Benar-benar menguji pernyataan penjaga! Itu adalah bagian penting dari perilaku metode itu, Anda tidak ingin mengetahui ada orang yang salah paham melakukan perbaikan bug dan menghilangkan penjaga Anda atau mengubahnya
&&
menjadi, bukan||
? Tes unit akan memastikan bahwa a) Anda benar-benar mendapatkan logika pada penjaga Anda dengan benar dan b) tidak ada yang mematahkan logika itu nanti tanpa mendapatkan keluhan ketika mereka menjalankan tes unit yang mengatakan kepada mereka bahwa itu harus seperti itu karena suatu alasan.sumber
Ada beberapa jawaban yang sangat baik di atas, dan poin yang mereka buat sangat penting. Tetapi satu yang tampaknya terlewatkan adalah bahwa Anda memiliki serangkaian unit test yang komprehensif, mereka membaca seperti spesifikasi kode yang sangat terperinci. Jika Anda mengabaikan validasi pengujian hanya karena kodenya begitu mudah, sulit untuk melihat bagaimana kesalahannya, bagian dari spesifikasi Anda tidak ada. Jika saya datang ke tim di mana tes-tes ini terlewatkan, saya benar-benar akan menganggap layanan Anda tidak memvalidasi argumennya.
sumber
Kode adalah kode. Anda harus mencoba untuk mendapatkan cakupan 100% saat pengujian. Jika tidak penting itu tidak akan ada di sana.
sumber