Visual Studio permet à l'unité de l'essai de méthodes privées via généré automatiquement accesseur de la classe. J'ai écrit un essai d'une méthode privée qui compile correctement, mais il ne parvient pas à l'exécution. Un assez minime version du code et le test est:
//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'erreur d'exécution est:
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]'.
Selon intellisense - et donc je suppose que le compilateur cible est de type TypeA_Accessor. Mais à l'exécution, il est de type TypeA, et donc la liste ajouter échoue.
Est-il possible que je puisse arrêter cette erreur? Ou, peut-être plus probable, que d'autres conseils d'autres personnes (je prévois peut-être "n'est pas tester les méthodes privées" et "n'ont pas les tests unitaires de manipuler l'état des objets").