当前位置: 首页 > 知识库问答 >
问题:

如何向注入的类成员提供模拟实例

叶福
2023-03-14

我正在使用JUnit4和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);
  }
}

当我尝试使用confiService.send(feed backData)时,测试会产生一个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仍然存在。

如何正确地做到这一点?

共有1个答案

魏书
2023-03-14

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

@Mock
ConfigService mockedConfigService;

@InjectMocks
FeedbackServlet tested = new FeedbackServlet();
 类似资料:
  • 我试图模拟一个单例类(SessionDataManager),通过调用静态getInstance()方法获得一个实例,但所有尝试似乎都返回null。 我试过了

  • 使用mockito inline如何测试静态函数(使用stubing其他静态函数)或mock/stub某些内部依赖类? 以下是示例: 具有内部依赖于java的类Util。安全消息摘要 容器类有一些静态函数要测试 希望测试,并将返回为null,以便somettext有望返回。 由于它是静态函数,因此使用powermock进行了测试。 当使用模拟存根时。调用getStringDigest(),返回nu

  • 可以模拟抽象类,也可以使用Mockito注释将模拟类注入抽象类。我现在有以下情况: 我想在AbstractClassUnderTest上使用类似@InjectMocks的东西,但它不能与@Mock结合使用。Powermock的Whitebox的当前情况是有效的,但我很好奇是否可以通过注释来解决它。我找不到任何解决方案或示例。 (我知道对测试抽象类的反对意见,我个人更愿意测试一个具体的实现,只使用@

  • 有什么方法可以模拟这个私有方法来测试我编写的方法吗?

  • 我有一个@InjectMocks对象,在我的测试类中使用@InjectMocks时,我需要模拟它抛出的NPE 下面是我的班级结构 你能建议如何模仿这个MyService对象吗。我已经使用了@Mock和@Injected Mock,但在获得NPE时不起作用。我尝试注入基类和父类,但没有成功。

  • 问题内容: 我是开发的新手,尤其是单元测试的新手。我想我的要求很简单,但是我很想知道其他人对此的想法。 假设我有两个这样的类- 假设我正在编写单元测试到测试方法。但是,假设我想像这样模拟课程。我正在使用Mockito来做到这一点。 我看到模拟未生效,并且断言失败。没有办法模拟我要测试的类的成员变量。? 问题答案: 您需要提供一种访问成员变量的方式,以便您可以进行模拟传递(最常见的方式是使用参数的s