我有一个方法可以测试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);
答案 0 :(得分:0)
这里的问题是JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
正在JAXBContext
上调用静态方法,而您不能使用Mockito
来模拟它。您可以使用PowerMockito
,但也许这太过分了。
测试否定性的一种方法是找到一个Class
,它不能与-一起使用。一个没有JAXB注释,或者是私有的,或者是一个内部类,或者其他不自然的东西。与真正失败的输入相比,使用真正失败的输入调用此方法将是对错误处理的更好测试,这比模拟失败要真实得多。
或者,将此特定的代码微模块放在接口后面,并对其进行模拟,以使您能够测试其调用者如何处理遇到错误的情况。