PowerMockito.verifyPrivate 始终独立于参数工作

PowerMockito.verifyPrivate always working independently of parameters

如标​​题所述,我可以调用 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());

也许我遗漏了什么,但我就是想不通。

首先。您是否在 privateMethod 中放置了一个调试点并查看它被调用了多少次?这会给你一些提示。
它被调用了两次。一旦你打电话

service.getNbInscriptions(operator, role, sivDto);

当你使用一次时

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

第二次使用您传递给 invoke 方法的参数调用它,测试总是成功。

使用 Spy 而不是 Mock 而不是

@InjectMocks
MyService service;

使用

@Spy
MyService myservice = new MyService(operationSivRepo)

这样,就不会对方法进行第二次调用,并且会正确验证参数。