模拟实例在@Mock 注释后为空

新手上路,请多包涵

我尝试运行这个测试:

     @Mock IRoutingObjHttpClient routingClientMock;
    @Mock IRoutingResponseRepository routingResponseRepositoryMock;

    @Test
    public void testSendRoutingRequest() throws Exception {
        CompleteRoutingResponse completeRoutingResponse = new CompleteRoutingResponse();
        completeRoutingResponse.regression_latencyMillis = 500L;

        Mockito.when(routingClientMock.sendRoutingRequest(any(RoutingRequest.class))).thenReturn(completeRoutingResponse);

        RoutingObjHttpClientWithReRun routingObjHttpClientWithReRun = new RoutingObjHttpClientWithReRun
                (routingClientMock, routingResponseRepositoryMock);

...
    }

但我得到 NullPointerException :

Mockito.when(routingClientMock.

我错过了什么?

原文由 Elad Benda2 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

当您想使用 @Mock 注释时,您应该使用 MockitoJUnitRunner

 @RunWith(MockitoJUnitRunner.class)
public class MockitoTest {

    @Mock
    private IRoutingObjHttpClient routingClientMock;

    @Test
    public void testSendRoutingRequest() throws Exception {
        // ...
    }

}

另请参阅 本教程

原文由 Roland Weisleder 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过三个选项来激活 @Mock 注释:MockitoRule、MockitoJUnitRunner、MockitoAnnotations.initMocks(this)。恕我直言,使用 MockitoRule 是最好的,因为它仍然可以让您选择另一个跑步者,例如 Parameterized

使用 MockitoRule

 public class MockitoTest {

  @Mock
  private IRoutingObjHttpClient routingClientMock;

  @Rule
  public MockitoRule rule = MockitoJUnit.rule();

  @Test
  public void testSendRoutingRequest() throws Exception {
    // ...
  }
}

使用 MockitoJUnitRunner

 @RunWith(MockitoJUnitRunner.class)
public class MockitoTest {

  @Mock
  private IRoutingObjHttpClient routingClientMock;

  @Test
  public void testSendRoutingRequest() throws Exception {
    // ...
  }
}

显式调用 MockitoAnnotations.initMocks(this)

这可以在 qn @Before 方法中,在你自己的跑步者或自己的规则中完成。

 public class MockitoTest {

  @Mock
  private IRoutingObjHttpClient routingClientMock;

  @Before
  public void createMocks() {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void testSendRoutingRequest() throws Exception {
    // ...
  }
}

原文由 Stefan Birkner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题