Pasti daftar yang bagus. Berikut beberapa pemikirannya:
Tulis tes dulu, lalu kodenya.
Saya setuju, pada level tinggi. Tapi, saya akan lebih spesifik: "Tulis tes dulu, lalu tulis kode secukupnya untuk lulus tes, dan ulangi." Jika tidak, saya takut pengujian unit saya akan terlihat lebih seperti pengujian integrasi atau penerimaan.
Kelas desain menggunakan injeksi ketergantungan.
Sepakat. Ketika sebuah objek membuat dependensinya sendiri, Anda tidak memiliki kendali atasnya. Inversi Kontrol / Injeksi Ketergantungan memberi Anda kontrol itu, memungkinkan Anda untuk mengisolasi objek yang diuji dengan tiruan / stub / dll. Ini adalah cara Anda menguji objek secara terpisah.
Pisahkan kode UI dari perilakunya menggunakan Model-View-Controller atau Model-View-Presenter.
Sepakat. Perhatikan bahwa bahkan penyaji / pengontrol dapat diuji menggunakan DI / IoC, dengan memberikan tampilan dan model stubbed / mocked. Lihat Presenter First TDD untuk lebih lanjut tentang itu.
Jangan menulis metode atau kelas statis.
Tidak yakin saya setuju dengan yang ini. Dimungkinkan untuk menguji unit metode / kelas statis tanpa menggunakan tiruan. Jadi, mungkin ini adalah salah satu aturan khusus Rhino Mock yang Anda sebutkan.
Programkan antarmuka, bukan kelas.
Saya setuju, tetapi untuk alasan yang sedikit berbeda. Antarmuka memberikan banyak fleksibilitas bagi pengembang perangkat lunak - lebih dari sekadar dukungan untuk berbagai kerangka objek tiruan. Misalnya, tidak mungkin mendukung DI dengan baik tanpa antarmuka.
Pisahkan dependensi eksternal.
Sepakat. Sembunyikan dependensi eksternal di balik fasad atau adaptor Anda sendiri (sebagaimana mestinya) dengan antarmuka. Ini akan memungkinkan Anda untuk mengisolasi perangkat lunak Anda dari ketergantungan eksternal, baik itu layanan web, antrian, database atau yang lainnya. Ini sangat penting ketika tim Anda tidak mengontrol ketergantungan (alias eksternal).
Tandai sebagai virtual metode yang ingin Anda tiru.
Itu batasan dari Rhino Mocks. Dalam lingkungan yang lebih memilih stub kode tangan daripada kerangka objek tiruan, itu tidak diperlukan.
Dan, beberapa hal baru yang perlu dipertimbangkan:
Gunakan pola desain yang kreatif. Ini akan membantu dengan DI, tetapi juga memungkinkan Anda untuk mengisolasi kode itu dan mengujinya secara independen dari logika lain.
Menulis tes menggunakan teknik Bill Wake's Arrange / Act / Assert . Teknik ini memperjelas konfigurasi apa yang diperlukan, apa yang sebenarnya sedang diuji, dan apa yang diharapkan.
Jangan takut untuk mengolok-olok / bertopik Anda sendiri. Seringkali, Anda akan menemukan bahwa menggunakan kerangka objek tiruan membuat pengujian Anda sangat sulit untuk dibaca. Dengan menggulirkan milik Anda sendiri, Anda akan memiliki kendali penuh atas tiruan / rintisan Anda, dan Anda akan dapat membuat tes Anda tetap terbaca. (Lihat kembali poin sebelumnya.)
Hindari godaan untuk memfaktor ulang duplikasi dari pengujian unit Anda menjadi kelas dasar abstrak, atau metode penyiapan / pembongkaran. Melakukannya akan menyembunyikan kode konfigurasi / pembersihan dari pengembang yang mencoba melakukan pengujian unit. Dalam hal ini, kejelasan setiap pengujian individu lebih penting daripada memfaktorkan ulang duplikasi.
Menerapkan Integrasi Berkelanjutan. Check-in kode Anda di setiap "bilah hijau". Bangun perangkat lunak Anda dan jalankan rangkaian lengkap pengujian unit Anda pada setiap check-in. (Tentu, ini bukan praktik pengkodean, per se; tetapi ini adalah alat yang luar biasa untuk menjaga perangkat lunak Anda tetap bersih dan terintegrasi sepenuhnya.)