Wenn ich Ihre Frage richtig verstanden habe, haben Sie eine Klasse A in einem anderen Assembly definiert, und dann eine Klasse B implementiert mehr oder weniger wie folgt aus:
public class B : A
{
public override MyMethod(object input)
{
// Do something
base.MyMethod(input);
}
}
Und jetzt wollen Sie, dass die Basis zu überprüfen. MyMethod heißt?
Ich sehe nicht, wie Sie dies mit einer dynamischen Scheinbibliothek tun können. Alle dynamischen Mock-Bibliotheken (mit Ausnahme von TypeMock) arbeiten, indem sie dynamisch Klassen ausgeben, die von dem fraglichen Typ abstammen.
In Ihrem Fall können Sie nicht sehr gut Moq fragen von A, abzuleiten, da Sie B testen möchten.
Das bedeutet, dass Sie Moq bitten müssen, Ihnen eine Mock<B>
zu geben. Dies bedeutet jedoch, dass der emittierte Typ von B abgeleitet ist, und obwohl MyMethod (das immer noch virtuell ist) überschrieben und seine Basis (B.MyMethod) aufgerufen werden kann, hat er keine Möglichkeit, zur ursprünglichen Klasse zu gelangen und zu überprüfen, ob B base.MyMethod
aufruft .
Stellen Sie sich vor, dass Sie eine Klasse schreiben (C), die von B. leitet Während Sie MyMethod außer Kraft setzen können, gibt es keine Möglichkeit, Sie überprüfen können, dass B ruft A:
public class C : B
{
public override MyMethod(object input)
{
// How to verify that base calls its base?
// base in this context means B, not A
}
}
Wieder mit der möglichen Ausnahme von TypeMock, Dynamic Mock-Bibliotheken können nichts tun, was Sie nicht manuell tun können.
Allerdings würde ich davon ausgehen, dass das Aufrufen der Basismethode, die Sie zu überprüfen versuchen, eine beobachtbare Nebenwirkung hat. Wenn möglich, können Sie also anstelle des verhaltensbasierten Tests zustandsbasierte Tests verwenden, um das Ergebnis des Aufrufs der Methode zu überprüfen ?
In jedem Fall sollte das statusbasierte Testen in den meisten Fällen Ihr Standardansatz sein.
Compilerfehler: Schlüsselwort 'this' ist im aktuellen Kontext nicht verfügbar. Im Feld Abgeleitete Klasse. –