Автоматическое определение побочных эффектов теста Junit
У меня есть набор устаревших модульных тестов, большинство из которых Spring AbstractTransactionalJUnit4SpringContextTests
тесты, но некоторые управляют транзакциями самостоятельно. К сожалению, это, похоже, привело к появлению побочных эффектов, приводящих к сбою совершенно несвязанных тестов при изменении набора тестовых данных, т. Е. Сбойный тест работает, когда он выполняется сам по себе (с тем же набором исходных данных), но не выполняется при запуске как часть полного набора тестов.
Тесты, как правило, выполняются через плагин Maven Surefire во время обычной сборки Maven.
То, что я ищу, - это автоматизированный способ изменения количества и порядка выполненных тестов, чтобы выяснить, кто виновен. Наивный, но довольно дорогой подход позволил бы взять под контроль все тесты и выполнить все возможные комбинации. Более оптимизированный подход будет использовать существующий порядок выполнения теста (который в основном случайный, но стабильный) и тестировать все потенциально упорядоченные подмножества. Я знаю, что время выполнения этого процесса может быть длительным.
Есть ли инструменты / плагины Maven, которые могут сделать это из коробки?
2 ответа
Я не знаю инструмента, который делает именно то, что вам нужно, но вы можете поиграть с параметром runOrder в maven surefire. С этой страницы:
Определяет порядок, в котором будут выполняться тесты. Поддерживаются следующие значения: "алфавитный", "обратный алфавитный", "случайный", "почасовой" (алфавитный в четные часы, обратный алфавитный в нечетные часы), "failfirst", "сбалансированный" и " файловая система".
Нечетный / четный для почасовой определяется во время сканирования пути к классу, что означает, что он может измениться во время многомодульной сборки.
Таким образом, вы можете сделать простой алфавитный прогон runOrder и сделать первый сбой, и начать с него. По крайней мере, у вас есть предсказуемый порядок выполнения. Затем вы запускаете один за другим (используя -Dinclude) каждый тест перед провальным и провальным, чтобы определить, какой из них делает провальный тест провальным.
Затем повторите весь процесс для всех неудачных тестов. Вы можете запустить это в одночасье или что-то в этом роде.
Можете ли вы просто изменить тесты, чтобы использовать чистую копию базы данных каждый раз? DBUnit - отличный инструмент для этого.