一尘不染

Java 使用Mockito测试抽象类

java

我想测试一个抽象类。当然,我可以手动编写一个从类继承的模拟。

我可以使用模拟框架(我正在使用Mockito)来执行此操作,而不是手工制作模拟吗?怎么样?


阅读 971

收藏
2020-03-12

共1个答案

一尘不染

以下建议让你在不创建“真实”子类的情况下测试抽象类-Mock 是子类。

使用Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS),然后模拟所有被调用的抽象方法。

例:

public abstract class My {
  public Result methodUnderTest() { ... }
  protected abstract void methodIDontCareAbout();
}

public class MyTest {
    @Test
    public void shouldFailOnNullIdentifiers() {
        My my = Mockito.mock(My.class, Mockito.CALLS_REAL_METHODS);
        Assert.assertSomething(my.methodUnderTest());
    }
}

注意:此方法的好处是,你不具备实现的抽象方法,只要他们永远不会被调用。

在我看来,这比使用间谍更整洁,因为间谍需要一个实例,这意味着你必须创建抽象类的可实例化子类。

2020-03-12