【问题标题】:How to provide a mock instance to an injected class member如何为注入的类成员提供模拟实例
【发布时间】:2017-10-31 13:30:45
【问题描述】:

我正在使用 JUnit 4 和 mockito 创建单元测试。我在尝试为类成员之一提供模拟实例时遇到问题。

这是要测试的类:

public class FeedbackServlet extends SlingAllMethodsServlet {
  @Reference
  private ConfigService configService;

  @Override
  protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) {
    FeedbackData feedbackData = extractFeedbackData(request.getRequestParameterMap());

    try {
      boolean isEmailSent = configService.send(feedbackData);
    } catch (Exception e) {
      ...
    }
  }

  private FeedbackData extractFeedbackData(RequestParameterMap data) {
    String firstName = data.getValue(ParamKey.FIRST_NAME.toString()).getString();
    String email = data.getValue(ParamKey.EMAIL.toString()).getString();
    String message = data.getValue(ParamKey.MESSAGE.toString()).getString();
    String contactNumber = data.getValue(ParamKey.CONTACT_NUMBER.toString()).getString();

    return new FeedbackData(firstName, email, message, contactNumber);
  }
}

当我尝试使用configService.send(feedbackData) 时,测试会生成NullPointerException。现在我尝试在测试类中注入缺失值:

public class FeedbackServletTest extends Mockito {
  @InjectMocks
  private ConfigService configService = mock(ConfigService.class);

  @Test
  public void testDoPost() throws Exception {
    ...
    when(configService.send(new FeedbackData("Nikola", "nikola.tesla@genius.co", "Our virtues and our failings are inseparable, like force and matter." +
            "When they separate, man is no more.", "09991234567"))).thenCallRealMethod();
    ...
  }
}

我尝试重新运行测试,但 NPE 仍然存在。

如何才能正确地做到这一点?

【问题讨论】:

    标签: java unit-testing junit mockito


    【解决方案1】:

    @InjectMocks 注解应该放在你要测试的对象实例上。

    @Mock
    ConfigService mockedConfigService;
    
    @InjectMocks
    FeedbackServlet tested = new FeedbackServlet();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多