У меня проблема с Mockito.Единичное тестирование с mockito (частичное издевательство)
Можно ли сделать такую вещь:
ClassX x = mock(ClassX.class)
when(x.methodB()).thenReturn("toto");
String result = x.methodA();
Я работаю с Mockito 1.7.
Я видел там была система «шпион», но они говорят, что не рекомендуется использовать его (почему?) По этому вопросу мы тестируем ...
Я попробовал эту функцию шпиона в любом случае, но я получаю странное поведение ,
Проверить, что я хочу сделать:
Реальный код:
String methodA(String arg) {
return this.methodB(arg);
}
String methodB(String arg) {
return "toto";
}
Код испытания:
@Test
public void testTest() {
final ClassX x = spy(new ClassX());
final String argument = "arg";
doReturn("good").when(helper).methodB(argument);
assertTrue( x.methodB(argument).equals("good"));
assertTrue( x.methodA(argument).equals("good"));
}
Как они сказали, что я избегал когда thenReturn синтаксис, что может быть проблема с шпион (но он все равно не работает)
Странно, что: assertTrue (x.methodB (аргумент) .equals ("good")); ОК
Только второй assertTrue (x.methodA (аргумент) .equals ("good")); не в порядке
Собственно helper.methodA (аргумент) возвращает «Тото» -> реальный результат, а не фиктивный результат
Это не возможно сказать Mockito вернуться «хорошо» в этом случае? ?? Кажется, что когда класс класса вызывает метод B, это нормально, но если метод шпиона вызывает методB, он больше не работает ...
Я не знаю, что делать ... это такое странное вещь для модульного тестирования 2 метода одного и того же класса и сделать тесты независимыми друг от друга, чтобы знаменитая фреймворк-макет не реализовал эту основную функцию? Разве это не то, что мы называем реальным модульным тестированием? Не понимаю, почему они говорят, чтобы избежать использования метода шпиона на тестируемом объекте ...
Благодаря
Просто попробовал это с Mockito 1.9.5, и оба возвратили '' good ''. Поэтому я думаю, что это пошло. – acdcjunior