Ich habe eine Factory-Methode Create<T>()
, die eine Instanz eines bestimmten Schnittstellentyps T
zurückgibt. Das Factory-Muster funktioniert, aber jetzt muss ich Test in MSTest für unsere Factory schreiben. Die Tests sollten prüfen, ob die Instanz unserer create-Methode die richtige ist. Grundsätzlich möchte ich so etwas wie dies zu tun:Reverse Typ von (T), um Typ in Tests zu verwenden
[DataTestMethod]
[DataRow(typeof(Member), typeof(MemberImpl))]
public void Test1(Type interfaceType, Type implType)
{
implType instance = PlanungContribution.Create<interfaceType>();
}
Das Problem ist, dass die DataRow
nur ein typeof(T)
und nicht T
als Parameter haben kann. Also muss ich den typeof(T)
Operator zurücksetzen.
Wie kann ich das erreichen? Gibt es einen besseren Weg, so etwas zu tun?
[EDIT]
[DataTestMethod]
[DataRow(typeof(Mitarbeiter), typeof(MitarbeiterImpl))]
public void Test1(Type interfaceType, Type baseType)
{
var t = typeof(ModelContributionPlanungEF6).GetMethod("Create").MakeGenericMethod(interfaceType).Invoke(PlanungContribution, new object[0]);
Assert.AreEqual(baseType, t);
}
Assert.AreEqual
gescheitert, weil sie nicht die gleichen sind. Genau hinsehen:
Nachricht: Assert.AreEqual fehlgeschlagen.
Erwartet: DP.PMS.EF6.Planung.MitarbeiterImpl (System.RuntimeType).
Aktuell: DP.PMS.EF6.Planung.MitarbeiterImpl (DP.PMS.EF6.Planung.MitarbeiterImpl).
'PlanungContribution.Create() GetType()' –
Will
@Will schöne Art und Weise, aber ich kann ** interfaceType ** auf diese Weise nicht verwenden. –
Sie können eine Schnittstelle sowieso nicht instanziieren, also was zum Teufel versuchen Sie zu tun? – Will