Visual Studio umożliwia testowanie jednostkowe metod prywatnych za pomocą automatycznie generowanej klasy akcesorium. Napisałem test prywatnej metody, która kompiluje się pomyślnie, ale kończy się niepowodzeniem w czasie wykonywania. Dość minimalna wersja kodu i testu to:
//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
}
Błąd środowiska wykonawczego to:
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]'.
Zgodnie z intellisense - i stąd sądzę, że kompilator - cel jest typu TypeA_Accessor. Ale w środowisku wykonawczym jest typu TypeA, a zatem dodawanie listy kończy się niepowodzeniem.
Czy jest jakiś sposób, aby zatrzymać ten błąd? Lub, być może bardziej prawdopodobne, jakie inne porady mają inne osoby (przewiduję, że „nie testuj metod prywatnych” i „nie testuj jednostkowo testów stanu obiektów”).