Ist das möglich? Ich versuchte mit EasyMock.expectLastCall().times(0);
aber EasyMock beschwert sich, dass Zeiten sein müssen> = 1Testen Sie, dass die Void-Methode nicht mit EasyMock aufgerufen wurde
Antwort
gelang es mir, mit einer Lösung zu kommen:
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
Assert.assertFail();
return null;
}
});
Sieht aus wie ein Fehler für mich. Die interne Klasse Range
erlaubt es nicht, ein Maximum von weniger als 1 einzustellen.
Konnten Sie diese Methode nicht vortäuschen, und rufen Sie einfach Assert.fail()
?
Ja, ich habe es so gemacht, siehe meine Antwort – nkr1pt
Wenn Sie Ihre Methode nicht erwartet, dann ist es ja nicht nur aufgerufen werden. Aber ich stimme zu, dass es nicht mit einem schönen Schein funktioniert.
mit EasyMock 3.0, benötigen Sie eine .anyTimes() auf dem expectLastCall oder den Test hinzufügen fehl:
Expectation failure on verify: myMethod(): expected: 1, actual: 0`
basierend auf nkr1pt Beispiel:
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
Assert.assertFail();
return null;
}
}).anyTimes();
Die Tatsache, dass einige Verfahren nicht aufgerufen wird, wird von Mock
oder StrictMock
gesteuert. Sie werden eine Ausnahme auslösen, wenn diese nicht aufgezeichnete Methode aufgerufen wird. Dieses Problem tritt nur bei Verwendung von NiceMock
s auf, wo Standardwerte zurückgegeben werden, wenn nicht aufgezeichnete Methoden aufgerufen werden.
So eine Lösung kann nicht NiceMock
s sein.
Ich stimme der Schlussfolgerung nicht zu. Vielleicht ist in diesem Fall ein schöner Schein nicht die beste Wahl. Aber wenn Sie sicherstellen wollen, dass eine Methode nicht aufgerufen wird, ist dies in der Tat das Einzige, was Sie testen möchten. Es ist besser, dies mit einer verspotteten Methode zu betonen, die mit einer entsprechenden Nachricht fehlschlägt. – qben
Es ist ein gutes Argument. Ich wollte auf dieses hinweisen, da ich darauf gestoßen bin, warum ich 'mal (0) 'nicht angeben kann. Und erst später wurde mir klar, dass dies der Idee des netten Spottes widerspricht, und nicht nette Spottdrohungen erlauben, dass nicht aufgezeichnete Methoden nicht ausgeführt werden. Eine assert-Ausnahme als Antwort zu werfen, schien eher eine Art Workaround für mich zu sein und 0 Methodenaufrufe sollten mit nicht-netten Mocks spezifiziert werden. Vielleicht bin ich ein bisschen selbstbewusst in der Schlussfolgerung. Ich werde es nur korrigieren. – Vic
Sie könnten .andThrow(new AssertionFailedError()).anyTimes();
verwenden - das ist die gleiche Ausnahme, die Assert.fail()
wirft, ist aber weniger ausführlich als eine Answer
.
Vielleicht eine gute Beschreibung hinzufügen, warum der Test fehlgeschlagen ist, verbessert diese Lösung (die das Beste von allen hier IMO ist). – qben
Siehe http://stackoverflow.com/questions/859031/easymock-void-methods, nicht sicher, es ist aber ein dupe. – philant
Es ist kein Duplikat. – hiergiltdiestfu