Ложное исключение не выдается во время заглушки - PullRequest
0 голосов
/ 16 октября 2019

У меня есть тест, который должен подделать JsonPropertiesException, но я понятия не имею, почему он продолжается

Это мой метод:

publish void publishEvent() {
String topicMessage = "";

    try {
        topicMessage = new ObjectMapper().writeValueAsString(publishEventDto);

    } catch (JsonProcessingException e) {
        log.error("publishEvent() JsonProcessingException: " + e.getMessage());
    }

}

И это мой тестэто не исключение:: (

ObjectMapper mapper = Mock(ObjectMapper)
mapper.writeValueAsString(publishEventDto) >> {throw Mock(JsonProcessingException) }

String expectedMessage = mapper

when:
publisher.publishEvent()

then:
0 * snsService.buildRequestAndPublish(*_)

1 Ответ

0 голосов
/ 18 октября 2019

Может быть, вы неправильно понимаете, как работают издевательства. Ваш тестируемый класс создает свой собственный ObjectMapper через new внутри метода. Это означает, что вы не можете ввести макет, чтобы заменить его во время теста. Поэтому вам нужно провести рефакторинг, чтобы сделать ваш код тестируемым. Создание макета внутри теста магическим образом не заставляет тестируемый класс использовать его, если вы не можете внедрить его.

Более того, если вы хотите, чтобы ваш ObjectMapper макет генерировал исключение, просто сгенерируйте исключение. Не надо издеваться над исключением тоже. Это не имеет никакого смысла делать это в вашем контексте.

Кроме того, ваш вопрос может использовать улучшение. Предлагаю предоставить полный тестовый класс вкл. Название пакета и импорт. Пожалуйста, также предоставьте проверяемый код. Я могу только догадываться, что делает тестируемый класс, читая ваш тест, например, вызывая метод buildRequestAndPublish какого-то загадочного объекта службы, если не выдается исключение. То, что это происходит , а не , кажется, что вы тестируете, но я могу только строить догадки.

Не стесняйтесь задавать дополнительные вопросы, если вы не понимаете мой ответ.

PS: Если вы отредактируете свой вопрос, чтобы превратить его в MCVE , я обещаю также обновить мой ответ конкретным решением вашей проблемы.

...