JMockit 验证是否调用了私有方法
JMockit verify if private method is called
我正在测试一个 public 方法,我想验证是否调用了具有模拟参数的私有方法。
我找到的所有答案都使用 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
}};
}
你有两种方法:
- 将方法的范围从私有提升到包私有,之后,您的方法将在测试中可见。
- 重构您的代码并将私有方法封装到 Predicate 之后,您可以分别测试您的主方法和 Predicate。
您不能通过 Junit 测试私有方法。
您可以使用 Powermock 来模拟和验证私有方法。
我正在测试一个 public 方法,我想验证是否调用了具有模拟参数的私有方法。 我找到的所有答案都使用 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
}};
}
你有两种方法:
- 将方法的范围从私有提升到包私有,之后,您的方法将在测试中可见。
- 重构您的代码并将私有方法封装到 Predicate 之后,您可以分别测试您的主方法和 Predicate。
您不能通过 Junit 测试私有方法。
您可以使用 Powermock 来模拟和验证私有方法。