【问题标题】:Junit Testing JAXBContext to throw JAXBException - testing failure scenario using mockitoJunit 测试 JAXBContext 以抛出 JAXBException - 使用 mockito 测试失败场景
【发布时间】:2018-11-30 20:28:30
【问题描述】:

我有一个测试 jaxbexception 的方法,在这个方法之前有初始验证,所以我不能发送无效请求来发生 JAXBException。我看到的唯一方法是使用 MOCKITO,尝试过但对我不起作用。

待测方法:

 private String methodtoBeTested(Object request, Class clazz)
{
    try
    {
        StringWriter sw = new StringWriter();
        JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.marshal(request, sw);
        return sw.toString();
    }
    catch(JAXBException e)
    {
        LOG.error("jaxbexception encountered" + e.getMessage());
    }
}

到目前为止我试过了:

JAXBContext jaxbMock = mock(JAXBContext.class);
    Marshaller marshalmock = mock(Marshaller.class);
    when(jaxbMock.createMarshaller()).thenThrow(JAXBException.class);

【问题讨论】:

    标签: java junit mockito


    【解决方案1】:

    这里的问题是JAXBContext jaxbContext = JAXBContext.newInstance(clazz);JAXBContext 上调用静态方法,而您不能使用Mockito 来模拟它。您可以使用PowerMockito,但也许这太过分了。

    您可以对此进行否定测试的一种方法是找到一个不能与它一起使用的Class - 例如一个没有 JAXB 注释,或者是私有的,或者是一个内部类,或者其他它自然不喜欢的东西。使用真正失败的输入调用此方法,将比模拟失败更好地测试您的错误处理,这可能无法真实反映真实情况。

    或者,将这个特定的代码微模块放在接口后面,并模拟整个接口,以便您测试其调用者将如何处理遇到错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多