PowerMockito。模拟静态方法。为什么PowerMockito #stub不工作?

时间:2014-05-12 08:42:53

标签: java unit-testing mockito powermock stubbing

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

代码:

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;

我错了什么?

1 个答案:

答案 0 :(得分:5)

您的方法是正确的,但是您缺少注释以使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));
    }
}

修改

要在评论中解决后续问题 - 如果您已经有测试运行员且无法使用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));
    }
}