我正在使用JUnit 4.12和Mockito 1.10.19而且我遇到了一个我无法解释的Mockito问题。
我正在创建一个抽象类(就像我过去一样),它在BaseFunction
类型的对象上设置了一个 spy (我的项目中有一个抽象类)
public abstract class AbstractFunctionTestCase<F extends BaseFunction> {
@Rule
public JUnitSoftAssertions softly = new JUnitSoftAssertions();
protected F function;
/**
* Return the real function here
* @return
*/
protected abstract F functionInstance();
@Before
public void setUp() {
function = Mockito.spy(functionInstance());
Mockito.doReturn("Bla").when(function).getDescription();
}
}
然后我只是将抽象类扩展为folows
@RunWith(MockitoJUnitRunner.class)
public class MyFunctionTest extends AbstractFunctionTestCase<MyFunction> {
@Override
protected MyFunction functionInstance() {
return new MyFunction();
}
@Test
public void myEmptyTest() {
// Nothing here, for real!
}
}
当我在IntelliJ中运行方法myEmptyTest
时,我得到了
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at com.company.functions.AbstractFunctionTestCase.setUp(AbstractFunctionTestCase.java:31)
对我来说很奇怪,是我通过调用
检查了setUp()
方法中的间谍
new MockUtil().isSpy(function)
有什么想法吗?
答案 0 :(得分:0)
因此,似乎不能模拟来自父类的方法。
我使用的解决方案是在接口内声明方法getDescription()
并使父类实现此接口。
E.g。
public interface Function {
String getDescription();
}
然后
public abstract class BaseFunction implements Function {
@Override
public String getDescription(){
return "bla";
}
}