2014-05-12 94 views
2

我想在类中只模拟一个静态方法,所有其他方法应该像真实对象一样工作。PowerMockito。模拟静态方法。为什么PowerMockito#stub不工作?

代码:

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)); 
    } 
} 

在输出I见777,但我想看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)); 
    } 
} 
+0

如果类ArrTestTest已经与MockitoJUnitRunner.class一起运行,该怎么办? – gstackoverflow

+0

另一种方法是使用'PowerMockRule' - 我也用这些信息编辑了我的答案。 – Mureinik

+0

真棒,太棒了 – gstackoverflow

相关问题