Автоматическое определение побочных эффектов теста Junit - PullRequest
2 голосов
/ 13 марта 2012

У меня есть набор устаревших модульных тестов, большинство из которых - тесты Spring AbstractTransactionalJUnit4SpringContextTests, но некоторые управляют транзакциями самостоятельно.К сожалению, это, похоже, привело к побочным эффектам, приводящим к сбою совершенно несвязанных тестов при изменении набора тестовых данных, т. Е. Сбойный тест работает, когда он выполняется сам по себе (с тем же набором исходных данных), но не выполняется при запуске какчасть полного набора тестов.

Тесты обычно выполняются с помощью плагина Maven surefire во время обычной сборки Maven.

Мне нужен автоматический способ изменения суммы и порядка.из выполненных тестов, чтобы выяснить, виновник.Наивный, но довольно дорогой подход позволил бы взять под контроль все тесты и выполнить все возможные комбинации.Более оптимизированный подход будет использовать существующий порядок выполнения теста (который в основном случайный, но стабильный) и тестировать все потенциально упорядоченные подмножества.Я знаю, что время выполнения этого процесса может быть длительным.

Существуют ли какие-либо инструменты / плагины Maven, которые могут сделать это из коробки?

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Я не знаю инструмента, который делает именно то, что вам нужно, но вы можете поиграть с параметром runOrder в maven surefire . С этой страницы:

Определяет порядок запуска тестов. Поддерживаемые значения: «алфавитный», «обратный алфавитный», «случайный», «почасовой» (в алфавитном порядке в четные часы, в обратном алфавитном в нечетные часы), «failfirst», «сбалансированный» и «файловая система».

Нечетный / Четный для почасовых определяется во время сканирования пути к классу, то есть может изменить во время многомодульной сборки.

Таким образом, вы можете сделать простой алфавитный прогон runOrder и сделать первый сбой и начать с него. По крайней мере, у вас есть предсказуемый порядок выполнения. Затем вы запускаете один за другим (используя -Dinclude) каждый тест перед провальным и провальным, чтобы определить, какой из них делает провальный тест неудачным.

Затем повторите весь процесс для всех неудачных тестов. Вы можете запустить это в одночасье или что-то в этом роде.

0 голосов
/ 13 марта 2012

Можете ли вы просто изменить тесты, чтобы использовать чистую копию базы данных каждый раз?DBUnit - отличный инструмент для этого.

http://www.dbunit.org/

...