Jadi apakah pengujian dengan satu pernyataan melanggar KERING?
Tidak, tapi itu mempromosikan pelanggaran.
Yang mengatakan, desain berorientasi objek yang baik cenderung keluar jendela untuk tes unit - kebanyakan karena alasan yang baik. Lebih penting bahwa unit test diisolasi satu sama lain sehingga tes dapat diinterogasi secara terpisah dan jika perlu, diperbaiki dengan keyakinan bahwa Anda tidak melanggar tes lain. Pada dasarnya, uji kebenaran dan keterbacaan lebih penting daripada ukurannya atau kemampuan pemeliharaannya.
Terus terang, saya belum pernah menjadi penggemar dari satu pernyataan per aturan pengujian untuk alasan yang Anda jelaskan: ini mengarah ke banyak kode boilerplate yang sulit dibaca, mudah salah-boiler, dan sulit diperbaiki jika Anda refactor (yang mendorong Anda ke refactor lebih sedikit).
Jika suatu fungsi seharusnya mengembalikan daftar "foo" dan "bar" untuk input yang diberikan, tetapi dalam urutan apa pun baik-baik saja untuk menggunakan dua menegaskan untuk memeriksa bahwa keduanya dalam set hasil. Di mana Anda mendapat masalah adalah ketika tes tunggal memeriksa dua input atau dua efek samping dan Anda tidak tahu yang mana dari dua yang menyebabkan kegagalan.
Saya melihatnya sebagai variasi pada Prinsip Tanggung Jawab Tunggal: seharusnya hanya ada satu hal yang dapat menyebabkan tes gagal, dan di dunia yang ideal bahwa perubahan hanya boleh merusak satu tes.
Tapi pada akhirnya itu adalah trade off. Apakah Anda lebih cenderung menghabiskan lebih banyak waktu mempertahankan semua kode copy pastey, atau akankah Anda menghabiskan lebih banyak waktu memburu akar penyebab ketika tes dapat dipecahkan oleh berbagai sumber. Selama Anda menulis beberapa tes, mungkin tidak terlalu penting. Meskipun saya meremehkan untuk tes satu-assert, saya cenderung berbuat salah di samping lebih banyak tes. Jarak tempuh Anda mungkin beragam.