У меня проблема с Мокито.
Можно ли сделать такую вещь:
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") );
}
Как они сказали, я избежал синтаксиса when thenReturn, который может быть проблемой со шпионом (но он все равно не работает)
Странно то, что:
assertTrue (x.methodB (аргумент) .equals («хорошо»));
все в порядке
только второй
assertTrue (x.methodA (аргумент) .equals («хорошо»));
не в порядке
На самом деле helper.methodA (аргумент) возвращает «toto» -> реальный результат, а не фиктивный результат
Невозможно сказать, чтобы mockito вернул "good" в этом случае ??? Кажется, когда тестовый класс вызывает methodB, это нормально, но если метод шпиона вызывает методB, он больше не работает ...
Я не знаю, что делать ... странно ли проводить модульное тестирование 2 методов одного класса и делать тесты независимыми друг от друга, чтобы известная среда фиктивного тестирования не реализовала это основная функция? Разве это не то, что мы называем настоящим юнит-тестированием? Не понимаю, почему говорят, чтобы не использовать шпионский метод на тестируемом объекте ...
Спасибо