Unit testing JMockit中私有方法的验证
我想验证在我的JMockit测试类中是否调用了私有方法。我不想模拟私有方法,只想确保它已被调用 这可能吗?如果可能,如何实现 (我发现了一个类似的问题,但是那里的私有方法被嘲笑了,如果我能避免的话,我不希望这样。) 下面是我想做的一个例子Unit testing JMockit中私有方法的验证,unit-testing,private,jmockit,Unit Testing,Private,Jmockit,我想验证在我的JMockit测试类中是否调用了私有方法。我不想模拟私有方法,只想确保它已被调用 这可能吗?如果可能,如何实现 (我发现了一个类似的问题,但是那里的私有方法被嘲笑了,如果我能避免的话,我不希望这样。) 下面是我想做的一个例子 public class UnderTest { public void methodPublic(){ ..... methodPrivate(aStringList); ..... } private void me
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;
}
}
}
}
公共类未测试{
public void methodPublic(){
.....
methodPrivate(aStringList);
.....
}
private void methodPrivate(列表列表){
//做事
}
}
公共类TestMyClass{
@测试
试割;
@嘲弄
清单模拟清单;
@试验
public void testMyPublicMethod(){
cut.methodPublic();
新的核查(){
{
//这对我不起作用。。。
调用(剪切“methodPrivate”,模拟列表);
次数=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;
}
}
}
}
公共类TestMyClass{
@测试
试割;
@嘲弄
清单模拟清单;
@试验
public void testMyPublicMethod(){
cut.methodPublic();
新的期望值(未测试的类){{
cut.methodPrivate();
}}
新的核查(){
{
//希望现在这对你有用
invoke(cut,“methodPrivate”,mockList);//我假设您已经静态导入了Deencapsulation类
次数=1;
}
}
}
}
答案中值得注意:“验证只能在模拟的方法或实例上进行”。因此,我通过实际调用私有方法来“解决”它,然后使用assertEquals()验证结果(因为有些人建议不要模拟私有方法)。另一种方法是模拟私有方法(如上所述),只进行验证(),这使得私有方法未经测试。。。