2015-12-18 80 views
1

我有类似如下:惩戒静态类中的Mockito

public class Foo { 

    public static String getValue(String key) { 
     return key + "_" + System.currentTimeMillis(); 
    } 
} 

现在我需要有一个测试用例,并在这里是我尝试:

@Test 
public void testFoo() { 
    PowerMockito.mockStatic(Foo.class); 
    PowerMockito.when(Foo.getValue("123")).thenReturn("abcd"); 
    PowerMockito.verifyStatic(); 

} 

当我运行测试用例,我得到这个:

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'. 
For example: 
    when(mock.getArticles()).thenReturn(articles); 

Also, this error might show up because: 
1. you stub either of: final/private/equals()/hashCode() methods. 
    Those methods *cannot* be stubbed/verified. 
    Mocking methods declared on non-public parent classes is not supported. 
2. inside when() you don't call method on mock but on some other object. 

    at org.powermock.api.mockito.PowerMockito.when(PowerMockito.java:495) 

我做错了什么?

请指教。

回答

2

您是否确定您已将@PrepareForTest(Foo.class)注释添加到您的测试课程列表中on the PowerMock site,并且您使用的是PowerMockRunner JUnit4跑步者?

使用静态分派调用静态方法,而不是使用Java的正常多态性和方法重写动态分派。为了替换实现,PowerMock需要在测试开始运行之前加载替换类,并使跑步者和注释发生。

+0

你说得对。我添加了PrepareForTest注释,它工作。 – serverfaces