Проверка вызова статического метода void с помощью powermockito

Я пытаюсь зафиксировать метод logError в статическом классе (в том смысле, что каждый метод/поле является статическим) и убедиться, что он вызывался несколько раз другими методами в том же классе.

этот метод:

public static void logError(Object message){
    LOGGER.error(message); // static logger
}

моя попытка проверить это:

@Test
public void errLogTest() throws Exception{
    PowerMockito.mockStatic(X.class);
    PowerMockito.doNothing().when(X.class);
    X.logError(Mockito.anyString());
    X.open();
    X.open(); //should log error for opening twice
    PowerMockito.verifyStatic(Mockito.times(1));
}

Моя проблема в том, что сколько бы раз я ни указывал, это проходит. Я удалил насмешливое поведение и точно знаю, что регистратор вызывается один раз, но вместо этого я могу использовать PowerMockito.verifyStatic(Mockito.times(9001));, и он все равно проходит. Как мне это проверить?


person AdamSpurgin    schedule 04.03.2014    source источник


Ответы (1)


Вы пропустили строку кода после verifyStatic. Вы не указываете PowerMock что проверять. Вы также имитируете все статические методы класса, а не только тот, который вы не хотите вызывать.

@Test
public void errLogTest() throws Exception{
    PowerMockito.spy(X.class); //Used to be: PowerMockito.mockStatic(X.class);
    PowerMockito.doNothing().when(X.class);
    X.logError(Mockito.anyString());
    X.open();
    X.open(); //should log error for opening twice
    PowerMockito.verifyStatic(Mockito.times(1));
    X.logError(Mockito.anyString()); //Now verifyStatic knows what to verify.
}

Возможно, вам все же придется выполнить некоторую отладку, потому что, по моему опыту, настройка ожиданий иногда все равно вызывает базовый метод.

Вот javadoc для spy: http://static.javadoc.io/org.powermock/powermock-api-mockito/1.5.4/org/powermock/api/mockito/PowerMockito.html#spy(java.lang.Class)

Вот javadoc для verifyStatic: http://static.javadoc.io/org.powermock/powermock-api-mockito/1.5.4/org/powermock/api/mockito/PowerMockito.html#verifyStatic(org.mockito.verification.VerificationMode)

person Matt Lachman    schedule 05.03.2014
comment
Сделанный. Я не использовал последнюю версию, потому что я не тестировал ее повторно. - person Matt Lachman; 02.06.2016