我想验证是否在我的JMockit测试类中调用了私有方法。我不想模仿私有方法,只是确保它被调用。
这是可能的,如果是这样的话?
(我发现了一个类似的问题,但私人方法被嘲笑,如果我可以避免,我不想要。) 这是我想要做的一个例子。
public class UnderTest {
public void methodPublic(){
.....
methodPrivate(aStringList);
.....
}
private void methodPrivate(List<String> slist){
//do stuff
}
}
public class TestMyClass {
@Tested
UnderTest cut;
@Mocked
List<String> mockList;
@Test
public void testMyPublicMethod() {
cut.methodPublic();
new Verifications() {
{
// this doesnt work for me...
invoke(cut, "methodPrivate", mockList);
times = 1;
}
}
}
}
答案 0 :(得分:1)
您需要部分模拟(如果您想知道它是否被触发,则无法避免在此实例中模拟私有方法 - 验证只能在模拟方法或实例上完成)。我之前没有使用过JMockit,但我希望代码看起来类似于:
public class TestMyClass {
@Tested
UnderTest cut;
@Mocked
List<String> mockList;
@Test
public void testMyPublicMethod() {
cut.methodPublic();
new Expectations(UnderTest.class) {{
cut.methodPrivate();
}}
new Verifications() {
{
// this should hopefully now work for you
invoke(cut, "methodPrivate", mockList); //I assume here that you have statically imported the Deencapsulation class
times = 1;
}
}
}
}