Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证使用PowerMockito调用最终类上的私有静态方法_Java_Powermockito - Fatal编程技术网

Java 验证使用PowerMockito调用最终类上的私有静态方法

Java 验证使用PowerMockito调用最终类上的私有静态方法,java,powermockito,Java,Powermockito,我有以下课程 public final class Foo { private Foo() {} public static void bar() { if(baz("a", "b", new Object())) { } } private static boolean baz(Object... args) { return true; // slightly abbreviated logic } } 这是我的测试: @PrepareOnlyThis

我有以下课程

public final class Foo {
  private Foo() {}
  public static void bar() {
    if(baz("a", "b", new Object())) { }
  }
  private static boolean baz(Object... args) {
    return true;  // slightly abbreviated logic
  }
}
这是我的测试:

@PrepareOnlyThisForTest(Foo.class)
@RunWith(PowerMockRunner.class)
public class FooTest {
  @Test
  public void bar() {
    PowerMockito.mockStatic(Foo.class); // prepare
    Foo.bar(); // execute
    verifyPrivate(Foo.class, times(1)).invoke("baz", anyVararg()); // verify - fails
  }
}
为此,我收到以下错误消息-我不明白为什么

需要但未调用com.example.Foo.baz( 无效)

但是,还有其他与此模拟的交互

删除上面的
prepare
行似乎会使验证行通过,无论您检查了多少次…:(

(我们的SONAR代码检查强制执行每个测试中都有某种
assertXyz()
(因此调用
verify()
)并强制执行非常高的测试覆盖率。)


你知道怎么做吗?

你的代码的问题是你模拟了
Foo
,所以你的方法实现在默认情况下不会被调用,当你调用
Foo.call()时
默认情况下,它什么也不做,这意味着它从不实际调用
baz
,这就是为什么会出现这种行为。如果您想部分模拟
Foo
,请使用选项
Mockito对其进行模拟。调用\u REAL\u方法
以使其像您期望的那样调用REAL方法,因此代码应该是:

@PrepareOnlyThisForTest(Foo.class)
@RunWith(PowerMockRunner.class)
public class FooTest {
    @Test
    public void bar() throws Exception {
        PowerMockito.mockStatic(Foo.class, Mockito.CALLS_REAL_METHODS); // prepare
        ...
    }
}

为什么要模拟静态方法,而不只是验证它是否正常工作?