Jenis pengembalian tidak valid / Subrutin adalah berita lama. Saya belum membuat tipe Void return (Kecuali saya menjadi sangat malas) dalam waktu 8 tahun (Dari saat jawaban ini, jadi hanya sedikit sebelum pertanyaan ini diajukan).
Alih-alih metode seperti:
public void SendEmailToCustomer()
Buat metode yang mengikuti paradigma int.TryParse () Microsoft:
public bool TrySendEmailToCustomer()
Mungkin tidak ada informasi metode Anda perlu kembali untuk digunakan dalam jangka panjang, tetapi mengembalikan keadaan metode setelah melakukan tugasnya adalah penggunaan yang sangat besar bagi penelepon.
Juga, bool bukan satu-satunya tipe negara. Ada beberapa kali Subroutine yang dibuat sebelumnya benar-benar dapat mengembalikan tiga keadaan yang berbeda (Baik, Normal, Buruk, dll.). Dalam kasus itu, Anda hanya akan menggunakan
public StateEnum TrySendEmailToCustomer()
Namun, sementara Try-Paradigm agak menjawab pertanyaan ini tentang cara menguji void return, ada pertimbangan lain juga. Misalnya, selama / setelah siklus "TDD", Anda akan "Refactoring" dan perhatikan Anda melakukan dua hal dengan metode Anda ... sehingga melanggar "Prinsip Tanggung Jawab Tunggal." Jadi itu harus diurus dulu. Kedua, Anda mungkin telah mengidentifikasi ketergantungan ... Anda menyentuh Data "Persisten".
Jika Anda melakukan hal-hal akses data dalam metode-dalam-pertanyaan, Anda perlu merevisi ke dalam arsitektur n-tier'd atau n-layer'd. Tetapi kita dapat mengasumsikan bahwa ketika Anda mengatakan "string kemudian dimasukkan ke dalam database", Anda sebenarnya berarti Anda memanggil lapisan logika bisnis atau sesuatu. Ya, kami akan menganggap itu.
Ketika objek Anda dipakai, Anda sekarang mengerti bahwa objek Anda memiliki dependensi. Inilah saatnya Anda perlu memutuskan apakah akan melakukan Injeksi Ketergantungan pada Objek, atau pada Metode. Itu berarti Konstruktor Anda atau metode-dalam-pertanyaan memerlukan Parameter baru:
public <Constructor/MethodName> (IBusinessDataEtc otherLayerOrTierObject, string[] stuffToInsert)
Sekarang Anda dapat menerima antarmuka objek tingkat bisnis / data Anda, Anda dapat mengejeknya selama Tes Unit dan tidak memiliki ketergantungan atau takut terhadap pengujian integrasi "Terkadang".
Jadi dalam kode langsung Anda, Anda memasukkan IBusinessDataEtc
objek NYATA . Tetapi dalam Unit Testing Anda, Anda meneruskan IBusinessDataEtc
objek MOCK . Di Mock itu, Anda bisa menyertakan Properti Non-Antarmuka seperti int XMethodWasCalledCount
atau sesuatu yang statusnya diperbarui ketika metode antarmuka dipanggil.
Jadi Tes Unit Anda akan melalui Metode Anda -Dalam-Pertanyaan, melakukan logika apa pun yang mereka miliki, dan memanggil satu atau dua, atau serangkaian metode yang dipilih di IBusinessDataEtc
objek Anda . Ketika Anda melakukan Pernyataan Anda di akhir Tes Unit Anda, Anda memiliki beberapa hal untuk diuji sekarang.
- Keadaan "Subroutine" yang sekarang menjadi metode Try-Paradigm.
- Keadaan
IBusinessDataEtc
objek Mock Anda .
Untuk informasi lebih lanjut tentang ide-ide Ketergantungan Injeksi pada tingkat Konstruksi ... karena mereka berkaitan dengan Unit Testing ... lihat pola desain Builder. Ini menambahkan satu lagi antarmuka dan kelas untuk setiap antarmuka / kelas saat ini yang Anda miliki, tetapi mereka sangat kecil dan memberikan peningkatan fungsionalitas BESAR untuk Unit-Testing yang lebih baik.