Visual Studio permite pruebas unitarias de métodos privados a través de una clase de acceso generada automáticamente. He escrito una prueba de un método privado que se compila con éxito, pero falla en tiempo de ejecución. Una versión bastante mínima del código y la prueba es:
//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
}
El error de tiempo de ejecución es:
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]'.
De acuerdo con intellisense, y por lo tanto supongo que el compilador, el destino es de tipo TypeA_Accessor. Pero en tiempo de ejecución es de tipo TypeA, y por lo tanto, la lista de agregar falla.
¿Hay alguna forma de detener este error? O, quizás más probablemente, qué otro consejo tienen otras personas (predigo que tal vez "no pruebe métodos privados" y "no haga que las pruebas unitarias manipulen el estado de los objetos").