Я использую Mockito в своих тестах JUnit. Тест является интеграционным тестом, проверяющим весь сценарий, поэтому в нем много утверждений и verify(mock)
.mockito «проверяет» проверяет текущее состояние, но не возвращает макетные вызовы
Моя проблема заключается в том, что я пишу какой-то производственный код, делая некоторые утверждения, а затем проверяю макет, который работает, пока не будет идентичный притворный вызов. см упрощенного кода:
interface I {
void m1();
void m2();
}
// some decorator
class T implements I {
public T(I decorated) {
/*...*/
}
/* ... */
}
public void testInvalid() {
I m = mock(I.class);
T t = new T(m);
t.m1();
assertEquals("m1", t.getLastMethod());
verify(m).m1();
t.m2();
assertEquals("m2", t.getLastMethod());
verify(m).m2();
t.m1();
assertEquals("m1", t.getLastMethod());
verify(m).m1();
// TooManyActualInvocations t.m1(): Wanted 1 time, but was 2 times ...
}
public void testValid() {
I m = mock(I.class);
T t = new T(m);
t.m1();
assertEquals("m1", t.getLastMethod());
t.m2();
assertEquals("m2", t.getLastMethod());
t.m1();
assertEquals("m1", t.getLastMethod());
verify(m, times(2)).m1();
verify(m).m2();
}
Одна идеи заключается в том, чтобы проверить издевается в конце, но, скажем, есть маленькая глупая ошибка реализации, что приводит к вызову метода m1 дважды м2 один раз, но не так как я бы ожидать это в testInvalid
, но в конце тест пройдет. Я хочу, чтобы мой тест провалился раньше. Как это сделать?
спасибо.
Благодаря @Woozy Coder:
Не упоминается, что reset
также будет вариант, но так как она будет называться между проверки и на следующий вызов равен заглушкой, это делает его трудно писать " хороший "и правильные тесты, я думаю. Там должно быть два разных стилей насмешливо:
- «Постусловие» насмешливый, как Mockito делает это
- «рано» пересмешник, который будет неявный сброс после блока проверки-
что-то вроде:
earlyReset(m).after(
new Runnable() {
t.someMethodInvokingTwoStubs();
verify(m).someMethod1();
verify(m).someMethod2();
}
);
Дайте попробовать на этот [ответ] (http://programmers.stackexchange.com/questions/188299/is-this-an-appropriate-use-of-mockitos-reset-method) – kazbeel
Не испытывай несколько методов в одном методе тестирования. Тест должен иметь ОДНУ вещь, которую он тестирует, и предпочтительно ОДНУ вещь, которая может потерпеть неудачу. Тестирование нескольких методов делает ваш тест более сложным. Разделение ваших тестов на несколько методов тестирования решит эту проблему. –
@WoozyCoder спасибо, отредактировал мой пост – Aitch