【问题标题】:PowerMockito. Mock static method. why does not PowerMockito#stub work?PowerMockito。模拟静态方法。为什么 PowerMockito#stub 不起作用?
【发布时间】:2014-06-29 13:11:41
【问题描述】:

我只想在类中模拟一个静态方法,所有其他方法都应该像真实对象一样工作。

代码:

public class ArrTest {

    public static int myMethod (int arr []) {           
        return 777;
    }
}

测试这个方法:

public class ArrTestTest {
    @Test
    public void myMethodTest(){        
        PowerMockito.stub(PowerMockito.method(ArrTest.class, "myMethod")).toReturn(0);
        System.out.println(ArrTest.myMethod(null));
    }
}

在输出中我看到 777 但我想看到 0;

我做错了什么?

【问题讨论】:

    标签: java unit-testing mockito powermock stubbing


    【解决方案1】:

    您的方法是正确的,但您缺少使 PowerMockito 检测类并使用适当的测试运行器的注释:

    @PrepareForTest(ArrTest.class)
    @RunWith(PowerMockRunner.class)
    public class ArrTestTest {
        @Test
        public void myMethodTest(){
            PowerMockito.stub(PowerMockito.method(ArrTest.class, "myMethod")).toReturn(0);
            System.out.println(ArrTest.myMethod(null));
        }
    }
    

    编辑:

    为了解决 cmets 中的后续问题 - 如果您已经有一个测试运行器并且无法使用 PowerMockRunner,您可以使用 PowerMockRule 来获得相同的结果:

    @PrepareForTest(ArrTest.class)
    public class ArrTestTest {
    
        @Rule
        public PowerMockRule rule = new PowerMockRule();
    
        @Test
        public void myMethodTest(){
            PowerMockito.stub(PowerMockito.method(ArrTest.class, "myMethod")).toReturn(0);
            System.out.println(ArrTest.myMethod(null));
        }
    }
    

    【讨论】:

    • 如果ArrTestTest类已经用MockitoJUnitRunner.class RunWith了怎么办?
    • 另一种方法是使用PowerMockRule - 我也用这些信息编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多