Immer die Anzahl der Aufrufe einer mock
Nehme ich testen will code wie folgt:
class ClassToTest
//UsedClass1 contains a method UsedClass2 thisMethod() {}
UsedClass1 foo;
void aMethod()
{
int max = new Random().nextInt(100);
for(i = 0; i < max; i++)
{
foo.thisMethod().thatMethod();
}
}
}
Wenn ich einen test wie diesen:
ClassToTest test;
UsedClass1 uc1;
UsedClass2 uc2;
@Test
public void thingToTest() {
test = new ClassToTest();
uc1 = mock(UsedClass1.class);
uc2 = mock(UsedClass2.class);
when(uc1.thisMethod()).thenReturn(uc2);
when(uc2.thatMethod()).thenReturn(true);
test.aMethod();
//I would like to do this
verifyEquals(callsTo(uc1.thisMethod()), callsTo(uc2.thatMethod()));
}
Wie bekomme ich die Anzahl der Aufrufe uc1.thisMethod()
und uc2.thatMethod()
so kann ich überprüfen, wurden Sie beide als die gleiche Anzahl von Zeiten?
- Der einzige Weg, ich kann mir (jetzt) ist ein wrapper um jede Methode, die erhöht es den eigenen Zähler jedes mal, wenn es aufgerufen wird. AFAIK die jvm nicht verfolgen die Anzahl der Male jede Methode/Klasse/instanziert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine benutzerdefinierte VerificationMode zählen die Aufrufe, hier gehen Sie:
Und dann verwenden Sie es wie diese (es funktioniert auch mit void-Rückgabe-Typen):
Können Sie etwas wie das hier tun:
Wenn Sie möchten, dass nur die Aufrufe von bestimmten Methode/param-Kombination, können Sie dies mit
mockingDetails(serviceMock).getInvocations()
und dann filtern Sie die Ergebnisliste für Ihre Methode Namen?Könnten Sie stub Ihre Methoden, und Inkrementieren einen Zähler, wie das ist:
AtomicInteger
?Wenn Sie wissen, die Anzahl der Zeiten, die eine Methode ist suppoed aufgerufen werden, können Sie die
times()
Methode MockitoAber ich sehe jetzt, dass Sie die Methode aufrufen, eine zufällige Anzahl von Zeiten, so dass dies wahrscheinlich nicht die beste Antwort, es sei denn, Sie stub die Zufallszahlen-generator, um immer wieder einen erwarteten Wert.
times()
Methode, es scheint seltsam, dass es keine Möglichkeit gibt, den Zugriff, die Anzahl direkt.