PowerMockito.verifyPrivate всегда работает независимо от параметров - PullRequest
1 голос
/ 23 марта 2020

Как гласит заголовок, я могу вызвать verifyPrivate, но он всегда дает мне успех, даже если я передаю ему неправильные параметры.

Реальный пример

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyService.class})
public class MyServiceTest {

@InjectMocks
MyService service;

@Mock
OperationSivRepo operationSivRepo;

@Test
public void getNbInscriptions_should_call_getNbOperationsSiv_with_OPERATION_INSCRIPTION_GAGE() throws Exception {
    // GIVEN
    Role role = Role.ADMINISTRATEUR;
    String operator = "operator";
    SivDto sivDto = new SivDto();

    // WHEN
    service.getNbInscriptions(operator, role, sivDto);

    // THEN
    verifyPrivate(service).invoke("privateMethod", operator, Role.ADMINISTRATEUR, sivDto);
  }
}

Теперь этот код будет успешным, даже если я сделаю что-то вроде

// THEN
verifyPrivate(service).invoke("privateMethod", "other string", Role.USER, new SivDto());

Возможно, я что-то упускаю, но просто не могу понять.

1 Ответ

1 голос
/ 23 марта 2020

Во-первых. Вы поместили точку отладки в privateMethod и посмотрите, сколько раз она вызывается? Это дало бы вам подсказку.
Он вызывается два раза. Один раз, когда вы вызываете

service.getNbInscriptions(operator, role, sivDto);

, и один раз, когда вы используете

verifyPrivate(service).invoke("privateMethod", operator, Role.ADMINISTRATEUR, sivDto);

Второй раз, когда он вызывается с аргументами, которые вы передали для вызова метода, тесты всегда проходят успешно.

Использовать Spy вместо Mock Вместо

@InjectMocks
MyService service;

Использовать

@Spy
MyService myservice = new MyService(operationSivRepo)

При этом второй вызов метода не выполнен и аргументы проверены правильно ,

...