Saya baru-baru ini menemukan beberapa kode yang baru ditulis yang diselingi dengan banyak Debug.Assert (C #).
Haruskah kita masih menggunakan ini secara luas meskipun penggunaan TDD, BDD dan Unit Testing secara umum?
unit-testing
assertions
Dominik Fretz
sumber
sumber
Jawaban:
Saya tidak melihat alasan mengapa Anda tidak boleh menggunakan Assert. Dengan melakukan itu, Anda telah mengakui adanya kebutuhan akan penjaga, seperti prasyarat & invarian, dan membuat langkah menuju Desain berdasarkan Kontrak . Menyatakan hanya satu cara untuk mencapai ini ...
Semua cara mencapai hal yang sama: ketahanan dalam kode. Itu hanya datang untuk memilih opsi, di mana Assert adalah pilihan yang valid.
Perhatikan bahwa saya belum menyebutkan tes unit sama sekali sejauh ini, karena mereka mencapai sesuatu yang sangat berbeda. Tes unit secara formal membuktikan kekokohan kode dengan melatih penjaga:
Ini adalah jenis pernyataan yang sepenuhnya berbeda ...
** Perhatikan bahwa dalam beberapa kerangka kerja sebenarnya cukup sulit untuk menguji unit untuk kegagalan pernyataan, karena kegagalan pernyataan dapat menurunkan seluruh runtime, jadi salah satu opsi lain mungkin lebih disukai ... *
sumber
Saya menganggap tes menegaskan dan unit menjadi dua alat yang berbeda di kotak alat saya. Beberapa hal lebih cocok untuk satu, dan beberapa lebih cocok untuk yang lain.
Sebagai contoh, hari ini saya lebih banyak menggunakan pernyataan untuk memvalidasi parameter untuk metode non-publik.
sumber
Saya melihat Debug.Assert sebagai optimasi prematur saat ini. Kecuali Anda benar-benar membutuhkan kinerja, menekan Assert dalam mode rilis dapat menyembunyikan bug lebih lama.
Sebagai MattDavey poin kontrak kode bisa menjadi unggul, menyediakan statis memeriksa bukannya memeriksa dinamis, dan jika tidak tersedia saya lebih memilih Trace.Assert atau tua polos
if(x) throw SomeException;
sumber
Debug
kelas akan dilewati dari kompilasi ... jadi menekan panggilan untukAssert
hanya untuk kinerja bukan hanya optimasi prematur, itu omong kosong belaka.