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)
这样,就不会对方法进行第二次调用,并且会正确验证参数。
如标题所述,我可以调用 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)
这样,就不会对方法进行第二次调用,并且会正确验证参数。