Visual Studio permet le test unitaire des méthodes privées via une classe d'accesseur générée automatiquement. J'ai écrit un test d'une méthode privée qui se compile avec succès, mais elle échoue au moment de l'exécution. Une version assez minimale du code et du 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 - la cible est de type TypeA_Accessor. Mais au moment de l'exécution, il est de type TypeA, et donc l'ajout de liste échoue.
Est-il possible d'arrêter cette erreur? Ou, peut-être plus probablement, quels autres conseils ont d'autres personnes (je prédis peut-être "ne testez pas les méthodes privées" et "ne faites pas de tests unitaires manipuler l'état des objets").