Nach meinem Verständnis kann ich testen, ob ein Methodenaufruf erfolgt, wenn ich eine übergeordnete Methode aufrufe, dh:
public abstract class SomeClass()
{
public void SomeMehod()
{
SomeOtherMethod();
}
internal abstract void SomeOtherMethod();
}
Ich möchte das testen, wenn ich anrufe, SomeMethod()
dann erwarte ich, dass SomeOtherMethod()
das angerufen wird.
Habe ich Recht, wenn ich denke, dass diese Art von Test in einem spöttischen Rahmen verfügbar ist?
Nein, bei Mock-Tests wird davon ausgegangen, dass Sie bestimmte testbare Entwurfsmuster verwenden, von denen eines die Injektion ist. In Ihrem Fall würden Sie testen
SomeClass.SomeMethod
undSomeOtherMethod
müssen in einer anderen Entität implementiert werden, die verbunden werden muss.Ihr
Someclass
Konstruktor würde so aussehenNew(ISomeOtherClass)
. Dann würden Sie dieISomeOtherClass
Erwartung verspotten und festlegenSomeOtherMethod
, dass sie aufgerufen werden soll, und die Erwartung überprüfen.quelle
Obwohl ich damit einverstanden bin, dass die Antwort von @ Paul der empfohlene Weg ist, möchte ich nur einen alternativen Weg hinzufügen, der von
moq
außerhalb des Selbst bereitgestellt wird .Da
SomeClass
istabstract
es zwar spöttisch, aberpublic void SomeMehod()
nicht. Der Punkt ist, den Weg zu finden, um diese Methode zu verspotten und irgendwie aufzurufen und dannCallBase
den Aufruf an das weiterzuleitenSomeOtherMethod()
. Es mag wie ein Hack klingen, ist aber im Wesentlichen einfach. Es könnte in dem Fall verwendet werden, wenn das vorgeschlagene Refactoring nicht möglich ist.Dann können Sie festlegen
DummyMethod()
, dass der Anruf durch Setzen desCallBase
Flags weitergegeben wird.quelle