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

gst*_*low 3 java unit-testing mockito powermock stubbing

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

码:

public class ArrTest {

    public static int myMethod (int arr []) {           
        return 777;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试这种方法:

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

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

我错了什么?

Mur*_*nik 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

要在注释中解决后续问题 - 如果您已经有测试运行器且无法使用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));
    }
}
Run Code Online (Sandbox Code Playgroud)