Saya mengabstraksi bagian pelacakan riwayat kelas saya sehingga terlihat seperti ini:
private readonly Stack<MyObject> _pastHistory = new Stack<MyObject>();
internal virtual Boolean IsAnyHistory { get { return _pastHistory.Any(); } }
internal virtual void AddObjectToHistory(MyObject myObject)
{
if (myObject == null) throw new ArgumentNullException("myObject");
_pastHistory.Push(myObject);
}
internal virtual MyObject RemoveLastObject()
{
if(!IsAnyHistory) throw new InvalidOperationException("There is no previous history.");
return _pastHistory.Pop();
}
Masalah saya adalah saya ingin menguji unit bahwa Hapus akan mengembalikan objek yang Ditambahkan terakhir.
AddObjectToHistory
RemoveObjectToHistory
-> mengembalikan apa yang dimasukkan melaluiAddObjectToHistory
Namun, sebenarnya bukan unit test jika saya harus menelepon Add terlebih dahulu? Namun, satu-satunya cara yang dapat saya lakukan untuk melakukan ini dengan cara pengujian unit yang sebenarnya adalah dengan meneruskan objek Stack di konstruktor ATAU mengejek IsAnyHistory
...tetapi mengejek SUT saya juga aneh. Jadi, pertanyaan saya adalah, dari sudut pandang dogmatis, apakah ini unit test? Jika tidak, bagaimana cara membersihkannya...apakah injeksi konstruktor satu-satunya cara saya? Sepertinya sulit untuk melewati benda sederhana? Bolehkah mendorong benda sederhana ini keluar untuk disuntikkan?
IsAnyHistory
akan melemparInvalidOperationException
. Anda harus memeriksaCount
daripada menggunakanPeek
. - person Mike Zboray   schedule 24.06.2013