Saya diminta untuk melakukan proyek sampingan kecil untuk memasok aplikasi sederhana ke salah satu pelanggan kami. Biasanya saya akan mengerjakan kode back-end di mana saya memiliki semua kebutuhan pengujian saya tahu, dan saya belum memiliki kesenangan meragukan menulis tes untuk GUI, jadi agak tidak jelas bagi saya bagaimana saya harus mengatur kode pengujian dan alat untuk EXE.
Naluri pertama saya adalah hanya memasukkan tes dengan kode aplikasi, namun itu akan membutuhkan penyediaan sejumlah dependensi khusus tes, yang saya perintahkan untuk tidak dikirimkan ke pelanggan. Saya juga tidak dapat memeras uang tunai untuk alat uji tujuan dibangun, jadi saya harus menggunakan tools yang saya miliki di tangan ( StoryQ , RhinoMocks , dan NUnit), yang benar-benar harus lebih dari cukup untuk menguji perilaku aplikasi GUI sederhana. Jadi sejauh yang saya bisa lihat, ini membuat saya berusaha untuk mendapatkan keseimbangan yang baik antara menjaga desain benar-benar sederhana, atau sengaja melakukan rekayasa berlebihan demi pengujian. Sepertinya saya membangun aplikasi dengan logika bisnis di perpustakaan terpisah dan menguji terhadap perpustakaan seperti biasanya, atau menemukan beberapa mekanisme lain untuk memungkinkan saya menjalankan file tanpa merusak modul tambahan yang desain aplikasi tidak lakukan. sangat butuh.
Sunting:
Harap dicatat bahwa pertanyaan ini adalah tentang bagaimana menyusun hubungan antara NUnit dan executable saya - yang bertentangan dengan DLL - dan bukan tentang bagaimana memisahkan presentasi dan logika bisnis.
/ Edit
Jadi pertanyaan saya adalah:
- Apakah ada metode khusus / yang disarankan untuk mengonfigurasi aplikasi GUI sederhana dengan tes unit untuk memungkinkan saya memeriksa keadaan dan perilaku secara memadai, menggunakan alat yang saya miliki, dan tanpa menggunakan rekayasa berlebihan?
- Pernahkah saya melewatkan sesuatu yang mendasar tentang cara NUnit harus dipanggil / dikonfigurasikan ketika menguji EXE (sebagai lawan dari DLL)?
- Bisakah Anda memberikan atau mengarahkan saya ke arah contoh bagaimana mencapai semua ini?
Saya menyadari bahwa mungkin ada lebih dari satu cara untuk melakukan ini, jadi saya mencari pedoman implementasi spesifik berdasarkan pengalaman Anda.