В настоящее время мы с коллегами вводим модульные тесты в нашу устаревшую кодовую базу Java EE5. Мы используем в основном JUnit и Mockito. В процессе написания тестов мы заметили, что несколько методов в наших EJB трудно тестировать, потому что они делали много всего сразу.Как я могу использовать методы рефакторинга и модульных тестов для устаревших методов Java EE5 EJB?
Я довольно новичок во всем тестировании, и поэтому я ищу информацию о том, как лучше структурировать код или тесты. Моя цель - написать хорошие тесты без головной боли.
Это пример одного из наших методов и его логических шагов в службу, которая управляет очередью сообщений:
consumeMessages
acknowledgePreviouslyDownloadedMessages
getNewUnreadMessages
addExtraMessages (в зависимости от степени сложных условий)
markMessagesAsDownloaded
serializeMessageObjects
Метод верхнего уровня в настоящее время выставлен в интерфейсе, в то время как все суб-методы являются частными , Насколько я понимаю, было бы плохой практикой просто начать тестирование частных методов, так как должен иметь значение только публичный интерфейс.
Моя первая реакция состояла в том, чтобы просто сделать все под-методы общедоступными и протестировать их изолированно, а затем в методе верхнего уровня просто убедитесь, что он вызывает под-методы. Но затем коллега упомянул, что не может быть хорошей идеей разоблачить все эти низкоуровневые методы на том же уровне, что и другой, поскольку это может вызвать путаницу и другие разработчики, которые могут начать использовать, когда они должны использовать верхний уровень один. Я не могу винить его аргумент.
Итак, я здесь.
Как вы можете сблизить легко проверяемые низкоуровневые методы и избегать загромождения интерфейсов? В нашем случае интерфейсы EJB.
Я читал в других блочных тестовых вопросах, что следует использовать инъекцию зависимости или следовать принципу единой ответственности, но у меня возникают проблемы с ее применением на практике. У кого-нибудь есть указатели на то, как применить такой шаблон к описанному выше методу?
Вы бы порекомендовали другие общие шаблоны OO или шаблоны Java EE?
Спасибо за пример. В любом случае, это достаточно близко, чтобы Java была почти неразличимой! Я посмотрю, как я могу извлечь свои задачи в этот вид объекта. –