Visual Studio memungkinkan pengujian unit metode pribadi melalui kelas accessor yang dihasilkan secara otomatis. Saya telah menulis tes metode pribadi yang berhasil dikompilasi, tetapi gagal saat runtime. Versi kode yang cukup minimal dan tesnya adalah:
//in project MyProj
class TypeA
{
private List<TypeB> myList = new List<TypeB>();
private class TypeB
{
public TypeB()
{
}
}
public TypeA()
{
}
private void MyFunc()
{
//processing of myList that changes state of instance
}
}
//in project TestMyProj
public void MyFuncTest()
{
TypeA_Accessor target = new TypeA_Accessor();
//following line is the one that throws exception
target.myList.Add(new TypeA_Accessor.TypeB());
target.MyFunc();
//check changed state of target
}
Kesalahan runtime adalah:
Object of type System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' cannot be converted to type 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'.
Menurut intellisense - dan karenanya saya kira kompiler - target adalah tipe TypeA_Accessor. Tetapi pada saat runtime itu adalah tipe TypeA, dan karenanya menambahkan daftar gagal.
Apakah ada cara saya bisa menghentikan kesalahan ini? Atau, mungkin lebih mungkin, apa saran orang lain (saya memperkirakan mungkin "jangan menguji metode pribadi" dan "tidak memiliki unit test memanipulasi keadaan objek").