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

代码:

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;

我怎么了

最佳答案

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

10-06 02:40