O Visual Studio permite o teste de unidade de métodos particulares por meio de uma classe acessadora gerada automaticamente. Eu escrevi um teste de um método privado que é compilado com êxito, mas falha no tempo de execução. Uma versão bastante mínima do código e do teste é:
//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
}
O erro de tempo de execução é:
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 acordo com o intellisense - e, portanto, acho que o destino do compilador - é do tipo TypeA_Accessor. Mas, em tempo de execução, é do tipo TypeA e, portanto, a adição da lista falha.
Existe alguma maneira de parar esse erro? Ou, talvez mais provável, que outros conselhos as outras pessoas têm (eu prevejo que talvez "não teste métodos privados" e "não teste de unidade manipule o estado dos objetos").