2015-04-02 6 views
4

Я использую PowerMockito с Mockito, чтобы издеваться над несколькими статическими классами. Я хочу получить количество раз, когда какой-либо конкретный mock-объект вызывается во время выполнения, поэтому я могу использовать этот счетчик для проверки времени для другого макета.Как получить количество раз, когда mockito вызывается в Mockito

Мне нужно это, потому что метод, который я тестирую, запускает поток и останавливает поток через секунду. Мои издевательства называются несколько раз за эту 1 секунду. После того, как будет вызван первый макет, можно вызвать ветви кода и различные макеты. Итак, я хочу сравнить количество первого макета с количеством других макетов.

Это код устаревшего кода. Поэтому я не могу вносить изменения в фактический код. Я могу только изменить тестовый код.

ответ

3

Может быть проще, поскольку Mockito уже дает вам возможность проверять количество вызовов конкретного макета с использованием Mockito.verify(), но я не нашел способа вернуть этот счет, чтобы вы могли использовать ответы и реализовать свои собственный счетчик:

MyClass myObject = mock(MyClass.class); 
final int counter = 0; 

when(myObject.myMethod()).then(new Answer<Result>() { 
    @Override 
    public Result answer(InvocationOnMock invocation) throws Throwable { 
     counter++; 
     return result; 
    } 
}); 

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

@Edit: на самом деле, пройдя через API для версии 1.10 я нашел это:

Mockito.mockingDetails(mock).getInvocations(); 
+0

getInvocations() дал неверное значение в некоторых случаях. Может быть, значение mock invocation еще не обновлено к моменту его чтения. Мне пришлось немного поспать, прежде чем читать getInvocations, но спать - это последнее, что я хочу написать в своих тестах. – TechCrunch

+0

@TechCrunch. В этом случае единственное решение, которое я могу найти, это тот, который я написал выше, или какой-то AOP, но я думаю, что это будет слишком далеко. –

+0

@TechCrunch не могли бы вы вставить код, который показывает, когда getInvocations() дает Неверное значение? –

Смежные вопросы