Visual Studio consente il testing di unità di metodi privati tramite una classe di accessori generata automaticamente. Ho scritto un test di un metodo privato che viene compilato correttamente, ma non riesce in fase di esecuzione. Una versione abbastanza minimale del codice e il test è:
//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
}
L'errore di runtime è:
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]'.
Secondo intellisense - e quindi immagino che il compilatore - target sia di tipo TypeA_Accessor. Ma in fase di esecuzione è di tipo TypeA, quindi la lista aggiunge non riesce.
C'è un modo per fermare questo errore? O, forse più probabilmente, quale altro consiglio hanno gli altri (prevedo forse "non testare metodi privati" e "non avere unit test manipolano lo stato degli oggetti").