Ich habe zwei Klassen wie folgt aus (im aktuellen Projekt):Wie kann ich generische Argumente vor einer verkorkste von VS2008 Unit-Tests verhindern
namespace app {
internal class A {
}
internal class B {
private List<A> list;
private void SomeMethodToTest() {
list = new List<A>() { new A() };
}
}
Das ich meine Unit-Test wie
suchen etwas haben[TestClass()]
public class ATest {
[TestMethod()]
public void TestSomeMethod() {
B_Accessor b = new B_Accessor();
b.SomeMethodToTest();
Assert.AreEqual(1, b.list.Count); // ERROR ON THIS LINE
}
}
In der markierten Zeile bekomme ich eine InvalidCastException, die etwas sagt wie: "Objekt vom Typ System.Collections.Generic.List1 [app.A] kann nicht umgewandelt werden, um System.Collections.Generic.List1 [app.A_Accessor] einzugeben ]
Das Problem ist, dass, weil ein internes ist, die automatisch generierte Klasse B_Accessor wie
[Shadowing("app.B")]
public class B_Accessor : BaseShadow {
... stuff ...
[Shadowing("list")]
public List<A_Accessor> list { get; set; }
... stuff ...
}
Hinweis sieht, dass in der Accessor-Klasse, die Liste der Typ-Liste ist <A_Accessor> und nicht die Liste <A>. Ich habe das InternalsVisibleTo-Attribut für die Anwendung angegeben, sodass das Testprojekt auf den Typ A zugreifen kann. Aus irgendeinem Grund ersetzt VS es jedoch durch den Zugriffstypen, wodurch der Typ mit dem umschlossenen Typ inkompatibel wird.
Wie kann ich das umgehen, anstatt A öffentlich zu machen?
VS erzeugt die Zugriffsklassen automatisch zu ersetzen, wenn die Testprojekt wird gebaut. Ich kann B statt B_Accessor nicht verwenden, da ich auf ein privates Mitglied zugreifen möchte. – erikkallen
OK, wie testen Sie eine private Methode? Ich würde es vorziehen, die Kapselung nicht zu unterbrechen, damit die Tests funktionieren. – erikkallen
http://stackoverflow.com/questions/250692/how-do-you-unit-test-private-methods – JeffH