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!

Ich habe tatsächlich ein Thema eröffnet zu einem Thema, ich denke, dass könnte damit zusammenhängen. code.google.com/p/powermock/issues/detail?id=342

InformationsquelleAutor Kevin | 2011-03-12

Schreibe einen Kommentar