java - 使用 PowerMockito 1.6 验证静态方法调用

标签 java mockito junit4 powermock powermockito

我正在为类似于下面给出的示例的方法编写 JUnit 测试用例:

Class SampleA{
    public static void methodA(){
        boolean isSuccessful = methodB();
        if(isSuccessful){
            SampleB.methodC();
        }
    }

    public static boolean methodB(){
        //some logic
        return true;
    }
}

Class SampleB{
    public static void methodC(){
        return;
    }
}

我在我的测试类中写了下面的测试用例:

@Test
public void testMethodA_1(){
    PowerMockito.mockStatic(SampleA.class,SampleB.class);

    PowerMockito.when(SampleA.methodB()).thenReturn(true);
    PowerMockito.doNothing().when(SampleB.class,"methodC");

    PowerMockito.doCallRealMethod().when(SampleA.class,"methodA");
    SampleA.methodA();
}

现在我想验证是否调用了类样本 B 的静态方法 C()。如何使用 PowerMockito 1.6 实现?我已经尝试了很多东西,但它似乎并不适合我。感谢您的帮助。

最佳答案

就我个人而言,我不得不说 PowerMock 等是解决一个问题的方法,如果你的代码还不错的话,你就不应该有这个问题。在某些情况下,它是必需的,因为框架等使用静态方法导致无法以其他方式测试代码,但如果它是关于您的代码,您应该始终更喜欢重构而不是静态模拟。

无论如何,在 PowerMockito 中验证应该不会那么难......

PowerMockito.verifyStatic( Mockito.times(1)); // Verify that the following mock method was called exactly 1 time
SampleB.methodC();

(当然,要使其正常工作,您必须将 SampleB 添加到 @PrepareForTest 注释并为其调用 mockStatic。)

关于java - 使用 PowerMockito 1.6 验证静态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34323909/

相关文章:

java - 设置回收器项目点击监听器时出现空指针异常

java - 创建新线程的限制

java - 什么是 Kotlin 函数类型的 Java 等价物?

java - 是否有不可变(通常是 ConcurrentHashMap)数据结构的官方模式,能够定期替换?

java - 如何将项目导入Android Studio

java - 如何在 thenReturn 函数中返回传递给 Mockito 模拟方法的参数?

java - Mockito.verify 的 AssertJ 解决方案

java - 为构造函数编写 JUnit 测试用例

java - 在 junit 中创建写入文件方法的单元测试。

java - JUnit 4 断言中的 "is"