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