Java Powermock verifyPrivate不适用于任何()

Java Powermock verifyPrivate不适用于任何(),java,junit,mockito,powermock,Java,Junit,Mockito,Powermock,我有一个私有方法,我想在不考虑参数的情况下测试它的调用。我想测试它是否被调用 MyClass.java public void doStuff(){ unload(args); } private void unload(List<String> args) { // } 此测试失败,出现以下异常: 需要但未调用com.MyClass.unload( 无效) 但是,还有其他与此模拟的交互。。。。。。。 (调用时使用的实际值) verifyPrivate是否只能用

我有一个私有方法,我想在不考虑参数的情况下测试它的调用。我想测试它是否被调用

MyClass.java

public void doStuff(){
    unload(args);
}

private void unload(List<String> args) {
    // 
}
此测试失败,出现以下异常:

需要但未调用com.MyClass.unload( 无效)

但是,还有其他与此模拟的交互。。。。。。。 (调用时使用的实际值)


verifyPrivate是否只能用实际参数调用,而不能用
any()

下面是一个工作示例,说明您正在尝试执行的操作:

您可能只是缺少了
@PrepareForTest
注释,该注释必须指向正确的类。如果您的类是外部类,请使用
@PrepareForTest(MyClass.class)
,下面的示例将其与内部类一起显示

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClassTest.class)
public class MyClassTest {

    static class MyClass {

        public void doStuff(){
            unload(null);
        }

        private void unload(List<String> args) {
        }
    }

    @Test
    public void test() throws Exception {
        MyClass myClass = PowerMockito.spy(new MyClass());
        myClass.doStuff();
        PowerMockito.verifyPrivate(myClass, Mockito.times(1)).invoke("unload", Mockito.any());
    }
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClassTest.class)
公共类MyClassTest{
静态类MyClass{
公共空间{
卸载(空);
}
私有void卸载(列表参数){
}
}
@试验
public void test()引发异常{
MyClass MyClass=PowerMockito.spy(新的MyClass());
myClass.doStuff();
verifyPrivate(myClass,Mockito.times(1)).invoke(“unload”,Mockito.any());
}
}

注意,你应该考虑你是否真的想在UNITSATE中做到这一点。通常,您的UnitTest不应该关心是否使用了
private
方法,它应该集中于验证是否返回了正确的结果或是否达到了正确的对象状态


通过向其中添加关于类的内部行为的知识,您的测试与实现紧密耦合,这可能不是一件好事。

不匹配
null
。您将不得不改为使用。@second使用
any()
得到相同的错误。您能显示整个stacktrace吗?如果您能将示例转换为一个实例,将更容易理解它。在您的示例中,
args
是什么?
@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClassTest.class)
public class MyClassTest {

    static class MyClass {

        public void doStuff(){
            unload(null);
        }

        private void unload(List<String> args) {
        }
    }

    @Test
    public void test() throws Exception {
        MyClass myClass = PowerMockito.spy(new MyClass());
        myClass.doStuff();
        PowerMockito.verifyPrivate(myClass, Mockito.times(1)).invoke("unload", Mockito.any());
    }
}