Visual Studio ermöglicht das Unit-Testen privater Methoden über eine automatisch generierte Accessor-Klasse. Ich habe einen Test einer privaten Methode geschrieben, die erfolgreich kompiliert wurde, aber zur Laufzeit fehlschlägt. Eine ziemlich minimale Version des Codes und des Tests ist:
//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
}
Der Laufzeitfehler ist:
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]'.
Laut Intellisense - und daher denke ich, dass der Compiler - ist das Ziel vom Typ TypeA_Accessor. Zur Laufzeit ist es jedoch vom Typ TypeA, und daher schlägt das Hinzufügen der Liste fehl.
Kann ich diesen Fehler auf irgendeine Weise stoppen? Oder wahrscheinlich eher, welche anderen Ratschläge andere Menschen haben (ich gehe davon aus, dass "private Methoden nicht testen" und "Unit-Tests den Zustand von Objekten nicht manipulieren lassen").