PowerMock, mockito, überprüfen Sie die statische Methode
Ich versuche, PowerMock, um die Arbeit mit mockito, und ich bin nach der Dokumentation hier: http://code.google.com/p/powermock/wiki/MockitoUsage13.
Vereinfachen ein wenig, sagen wir, dass ich eine statische Methode:
StaticObj.put(String key, String val) { ... }
Und der zu testenden Klasse nicht so etwas wie dieses:
public class ClassToTest {
public void doSomething(Params p) {
if (StringUtils.isNotBlank(p.getK()) StaticObj.put("k1", p.getK());
if (StringUtils.isNotBlank(p.getX()) StaticObj.put("x1", p.getX());
}
}
In meinem unit-test würde ich mag, um zu überprüfen, dass StaticObj.setzen heißt für K und X, wenn Sie nicht leer oder null, so dass ich etwas wie das hier tun:
public void testNormalCase() {
//assume that mocking setup for statics already happened in some @Before function..
Params params = new Params("k", "x");
ClassToTest classToTest = new ClassToTest();
classToTest.doSomething(params);
//now I want to verify:
PowerMockito.verifyStatic(times(1));
StaticObj.put("k1", "k1");
PowerMockito.verifyStatic(times(1));
StaticObj.put("x1", "x");
}
Diese funktioniert, und es ist, was ich erwarten würde. Was nicht funktioniert, ist wenn ich kommentieren Sie die Prüfung für die K, dann die überprüfung für X nicht! Die Fehlermeldung zeigt an, dass ("x1", "x") erwartet, aber bekommen habe ("k1", "k"). Warum ist das so? Bin ich nicht Codierung das richtig?
Auch er führt mich zu glauben, dass die folgende Art von test, die vergeht, könnte pass für den falschen Grund ganz:
public void testOtherCase() {
//assume that mocking setup for statics already happened in some @Before function..
Params params = new Params("k", null);
ClassToTest classToTest = new ClassToTest();
classToTest.doSomething();
//now I want to verify:
PowerMockito.verifyStatic(never());
StaticObj.put(eq("x1"), anyString());
}
E. g. Ich Frage mich, ob powermock sieht "k1", entscheidet, dass "x1" wurde nie genannt wird, und übergibt. (?)
Um es in der Regel, ich habe eine statische Methode, die aufgerufen wird N-mal (wobei N ändert sich je nach Eingabe-Parameter). Und ich möchte, um zu überprüfen, hiess es in der richtigen Fällen (die können bestimmt werden, indem input params). Wie es scheint, powermock damit nicht zurechtkommt, es sei denn, ich missverstehen.
Vielen Dank für alle Ideen!
InformationsquelleAutor Kevin | 2011-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lese ich diese Frage und das Thema vorsichtig aber nicht sicher, ob ich Sie Verstand klar - Von meinem Verständnis, ist es richtig, dass powermock erhöhen die Ausnahme, wenn Sie pass k und x, sondern nur überprüfen, k.
Weil Sie verspotten die statische Methode StaticObj.setzen Sie, wenn Sie übergeben parameter k und x, und bestätigen Sie es mit
Sollte diese Arbeit. Und wenn Sie überprüfen, dass der parameter k und x mit der überprüfung für k auskommentiert ist.
Powermock erhalten Sie den Aufruf mit put("k1"...) zunächst scheinbar, so ist die überprüfung der x wird ein Fehler ausgelöst. Ihre überprüfung sequenziert.
InformationsquelleAutor Jianyu