Ну, я очень запутался в @Spy и @Mock.В моем понимании @Spy будет вызывать реальные методы, а @ Mock / @ InjectMocks - нет, потому что это всего лишь фиктивный вывод, тогда мне нужна заглушка (when.thenReturn), если я хочу изменить поведение макета.
В моем тестовом классе у меня есть этот код:
@RunWith(MockitoJUnitRunner.class)
public class CaixaServiceTest {
@InjectMocks
private CaixaService caixaService;
@Mock
private CaixaRepository caixaRepository;
Итак, CaixaRepository - это интерфейс JpaRepository из Spring Data, а CaixaService просто имеет очень простой метод:
public void calcular(){
int a = (int) Math.pow(1,3);
log.info(a);
}
Еслия называю caixaRepository.findOne(id)
null должен быть возвращен, потому что findOne никогда не вызывается на самом деле, потому что это просто фальшивка.Этот случай работает очень хорошо.
Но когда я вызываю caixaService.calcular()
, тело метода выполняется (не должно, потому что это фальшивка), поэтому log.info(a)
регистрируется в моем файле.
Я не могу понять это поведение, потому что, как я уже сказал, @InjectMocks или @Mock не должны ничего выполнять, если заглушка не существует, это задача @Spy.