Mockito UnfinishedStubbingException,但间谍存在

时间:2018-05-15 09:23:13

标签: java mockito junit4

我正在使用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)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

因此,似乎不能模拟来自父类的方法。

我使用的解决方案是在接口内声明方法getDescription()并使父类实现此接口。

E.g。

public interface Function {

  String getDescription();

}

然后

public abstract class BaseFunction implements Function {

   @Override
   public String getDescription(){
      return "bla";
   }
}