Visual Studio, otomatik olarak oluşturulan bir erişimci sınıfı aracılığıyla özel yöntemlerin birim sınanmasına olanak tanır. Başarıyla derleyen özel bir yöntem sınaması yazdım, ancak çalışma zamanında başarısız oluyor. Kodun ve testin oldukça minimal bir sürümü:
//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
}
Çalışma zamanı hatası:
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]'.
Intellisense göre - ve dolayısıyla derleyici - hedef TypeA_Accessor tipinde. Ancak çalışma zamanında TypeA türündedir ve bu nedenle liste ekleme işlemi başarısız olur.
Bu hatayı durdurabilmemin bir yolu var mı? Ya da, belki de daha büyük olasılıkla, diğer insanların önerileri nelerdir (belki "özel yöntemleri test etmiyorum" ve "birim testlerinin nesnelerin durumunu değiştirmesini beklemiyorum").