我正在测试一个公共方法,我想验证是否调用了一个私有方法,该方法模拟了params。我找到的所有答案都是使用invoke方法,但是自从jmockit v1.36之后,这个方法就被删除了
public class ClassToTest{
public void methodToTest(){
DependencyClass abc = new DependencyClass();
if(privateMethod1()){
privateMethod2(abc);
}
}
private boolean privateMethod1(){ return true; }
private void privateMethod2(DependencyClass abc){ abc.doStuff(); }
}
public class testClassToTest{
@Mocked
DependencyClass abc;
@Tested
ClassToTest testedClass;
@BeforeEach
public void setUp() {
testedClass = new ClassToTest();
}
@Test
public void testMethod(){
new MockUp<ClassToTest>() {
@Mock
private boolean privateMethod1() {
return true;
}
};
testedClass.methodToTest();
new FullVerificationsInOrder() {{
abc = new DependencyClass();
//Check here if privateMethod2(abc) gets called once
}};
}
2条答案
按热度按时间5q4ezhmt1#
你有两种方法:
将方法的作用域从private升级到package private,然后,方法将在测试中可见。
重构代码并将私有方法封装为 predicate ,然后可以分别测试主方法和 predicate 。
不能用junit测试私有方法。
5cg8jx4n2#
您可以使用powermock来模拟和验证私有方法。
请检查https://github.com/powermock/powermock/wiki/mockprivate