Skip to content
Advertisement

Mockito Spy : Wanted but not invoked, but it is

I have a basic unit test for a Service with a mocked repository as follow :

@Test
    public void deleteEmployeeCallsRepositoryDeleteById() {
        Employee employee = new Employee();
        employee.setName("coolName");
        employee.setId(8978L);
        EmployeeRepository repoSpy = spy(employeeRepository);
        service.deleteEmployeeById(employee.getId());
        verify(repoSpy, atLeastOnce()).deleteById(employee.getId());
    }

When running the test, I get the following error :

Wanted but not invoked:
employeeRepository.deleteById(8978L);
-> at unit.services.EmployeeServiceImplTests.deleteEmployeeCallsRepositoryDeleteById(EmployeeServiceImplTests.java:70)

However, there was exactly 1 interaction with this mock:
employeeRepository.deleteById(8978L);
-> at services.EmployeeServiceImpl.deleteEmployeeById(EmployeeServiceImpl.java:34)

Second sentence saying the exact opposite of the first sentence…

I tried using verify(repoSpy, atLeastOnce()).deleteById(anyLong()); just in case, but same error message.

Advertisement

Answer

spy doesn’t alter the argument in-place, it decorates it and returns the spying decorator. You need to pass mocks or spies to the code under test in the ordinary manner.

Advertisement