抽象类中的模拟时钟抛出NullPointerException

时间:2015-02-13 11:55:34

标签: java unit-testing mockito

我有一个像这样的抽象类

public abstract class MyClass {
 final Clock clock;

 Myclass(Clock clock) {
 this.clock = clock;
 }

 public void myMethod() {
   Long time = clock.now().getMillis(); // I get exception here.
   return true;
 }

}

现在我正在编写这样的测试:

class MyClassExtender extends MyClass {
  Myclass(Clock clock) {
    super(clock);
  }
}

在同一档案中

public class MyClassTest {

  private static final Long NOW = "283748L";

  @Rule
  public final Mocks mocks = new Mocks(this);

  @Mock
  private Clock clockMock;

  private myObject = new MyClassExtender(clockMock);

  @Before
  @SuppressWarnings("unchecked")
  public void setup() throws Exception {
    myClassSpy = Mockito.spy(myObject);
  }

  public void testMethod() {
    Mockito.when(clockMock.now().getMillis()).thenReturn(NOW);
    assertThat(myClassSpy.myMethod()).isTrue();
  }
}

这会在上面提到的第I行引发NullPointerException。我究竟做错了什么 ?仅供参考:now()返回' Instant'类对象。

1 个答案:

答案 0 :(得分:1)

你是否使用合适的跑步者,即。 MockitoJUnitRunner?

但是我相信clockMock只在对象创建后初始化,即。您的myObject将收到null作为参数。

尝试仅在myObject部分初始化@Before