Junit Тестирование JAXBContext для выброса JAXBException - тестирование сценария сбоя с использованием mockito - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть метод для проверки на 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 голосов
/ 01 декабря 2018

Проблема здесь в том, что JAXBContext jaxbContext = JAXBContext.newInstance(clazz); вызывает статический метод для JAXBContext, и вы не можете использовать Mockito для этого.Вы могли бы использовать PowerMockito, но, возможно, это излишне.

Один из способов проверить это на негатив - найти Class, с которым его нельзя использовать - например, тот, который имеетникаких аннотаций JAXB, или закрытых, или внутренних классов, или чего-то еще, что естественно не понравится.Вызов этого метода с входом, с которым он действительно отказывает, будет лучшей проверкой вашей обработки ошибок, чем насмешкой над ошибкой, которая может не отражать реально существующую.

В качестве альтернативы, поместите этот конкретный микроэлемент.модуль кода за интерфейсом и макет всего этого, чтобы вы могли проверить, как его вызывающие абоненты будут обрабатывать его при возникновении ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...