我正在使用TestNG 6.8.8,Mockito 1.9.5和PowerMock 1.5.4。当我模拟Child类并调用stubbed final方法时,测试有时会通过,并且有时会因错误MissingMethodInvocationException而失败。
这是PowerMock的错误吗?
public abstract class Parent implements Serializable {
protected abstract void validate();
public final Date getLastModified() {
return lastModified;
}
}
public class Child extends Parent {
@Override
protected void validate() {
// nothing for now.
}
}
import static org.powermock.api.mockito.PowerMockito.when;
@PrepareForTest({ Parent.class, Child.class })
public class ChildTest {
@Test
public final void testChildMethod() {
Child childObj = PowerMockito.mock(Child.class);
when(childObj.getLastModified()).thenReturn(new Date());
TestCodeThatResultsInCallToChild.getLastModified();
}
}
错误讯息:
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.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
It is a limitation of the mock engine.
" type="org.mockito.exceptions.misusing.MissingMethodInvocationException