代码之家  ›  专栏  ›  技术社区  ›  Shan

抽象类中的模拟时钟引发NullPointerException

  •  1
  • Shan  · 技术社区  · 10 年前

    我有一个这样的抽象类

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

    这会在我上面提到的行处引发NullPointerException。我做错了什么?仅供参考:now()返回一个“Instant”类对象。

    1 回复  |  直到 10 年前
        1
  •  2
  •   sodik    10 年前

    你使用正确的跑步者,即MockitoJUnitRunner吗?

    然而,我相信 clockMock 仅在创建对象后初始化,即 myObject 将收到 null 作为参数。

    尝试初始化 myObject(我的对象) 仅在中 @Before 部分