Nach meinem Verständnis kann ich testen, ob ein Methodenaufruf erfolgt, wenn ich eine übergeordnete Methode aufrufe, d. H .:
public abstract class SomeClass()
{
public void SomeMehod()
{
SomeOtherMethod();
}
internal abstract void SomeOtherMethod();
}
Ich möchte das testen, wenn ich SomeMethod()
aufrufe, dann erwarte ich, dass SomeOtherMethod()
aufgerufen wird.
Bin ich zu Recht der Meinung, dass diese Art von Test in einem spöttischen Rahmen verfügbar ist?
Mit Verify können Sie feststellen, ob eine Methode in etwas, das Sie verspottet haben, aufgerufen wurde, z.
static void Main(string[] args)
{
Mock<ITest> mock = new Mock<ITest>();
ClassBeingTested testedClass = new ClassBeingTested();
testedClass.WorkMethod(mock.Object);
mock.Verify(m => m.MethodToCheckIfCalled());
}
class ClassBeingTested
{
public void WorkMethod(ITest test)
{
//test.MethodToCheckIfCalled();
}
}
public interface ITest
{
void MethodToCheckIfCalled();
}
Wenn die Zeile mit einem Kommentar versehen ist, wird beim Aufruf von Verify eine MockException ausgelöst. Wenn es nicht kommentiert ist, geht es vorbei.
Nein, bei Scheintests wird davon ausgegangen, dass Sie bestimmte testbare Entwurfsmuster verwenden, von denen eines die Injektion ist. In Ihrem Fall würden Sie SomeClass.SomeMethod
Testen und SomeOtherMethod
muss in einer anderen Entität implementiert werden, die eine Schnittstelle benötigt.
Ihr Someclass
-Konstruktor würde wie New(ISomeOtherClass)
aussehen. Dann würden Sie das ISomeOtherClass
verspotten und die Erwartung auf das aufzurufende SomeOtherMethod
setzen und die Erwartung überprüfen.