Junit测试JAXBContext引发JAXBException-使用Mockito测试失败场景

时间:2018-11-30 20:28:30

标签: java junit mockito

我有一个方法可以测试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);

1 个答案:

答案 0 :(得分:0)

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

测试否定性的一种方法是找到一个Class,它不能与-一起使用。一个没有JAXB注释,或者是私有的,或者是一个内部类,或者其他不自然的东西。与真正失败的输入相比,使用真正失败的输入调用此方法将是对错误处理的更好测试,这比模拟失败要真实得多。

或者,将此特定的代码微模块放在接口后面,并对其进行模拟,以使您能够测试其调用者如何处理遇到错误的情况。