简体   繁体   English

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

[英]Mocking Clock in abstract class throws NullPointerException

I have an abstract class like this 我有一个像这样的抽象类

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;
 }

}

Now I'm writing tests like this: 现在,我正在编写这样的测试:

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

In the same file 在同一文件中

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();
  }
}

This throws a NullPointerException at the line I've mentioned above. 这在我上面提到的行上引发了NullPointerException。 What am I doing wrong ? 我究竟做错了什么 ? FYI: The now() returns an 'Instant' class object. 仅供参考:now()返回一个“即时”类对象。

Do you use proper runner, ie. 您是否使用适当的流道,即 MockitoJUnitRunner? MockitoJUnitRunner?

However I believe that clockMock is initialized only after object creation, ie. 但是,我相信clockMock仅在对象创建后才初始化。 your myObject will receive null as parameter. 您的myObject将收到null作为参数。

Try to initialize myObject only in @Before section. 尝试仅在@Before部分中初始化myObject

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM