2010-04-21 2 views
4

Мы используем транзакционные тесты Maven/Surefire и Spring/Hibernate для довольно большого веб-приложения. Есть 138 тестовых * классов, в которых работает 1178 тестов.Тесты Maven Spring терпят неудачу при совместном запуске, но успешно выполняются индивидуально (ehcache closed, IllegalTransactionStateException)

Прямолинейный «МВН тест» произведет 82 ошибок, характер которых, как правило, подразумевают коррумпированный контекст приложения:

Многие из них:
IllegalTransactionStateException: Pre переплете JDBC Connection найден!

Некоторые из них:
NoSuchMethodError:. Org.hibernate.cache.CacheException (Ljava/языки/Исключение;) V

Для каждого не прошел тест, выполнив тестовый класс индивидуально «тест MVN -Dtest = TestFailingClass "успешно. Действительно, использование -Dtest = TestClass1, TestClass2, Etc. "С различными подмножествами всех моих тестовых классов преуспевает или терпит неудачу по-разному. Например, запуск только неудачных тестовых классов выполняется с ошибками 0.

Без видимых средств чтобы контролировать порядок классов, проверенных Surefire, мне сложно определить, какой из моих тестовых классов, похоже, оставляет контекст в плохом состоянии.

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

И, конечно, предложения по что делать с этим ...

+0

Какой весна и JUnit версии вы используете? Наследуют ли ваши тесты от AbstractJUnit4SpringContextTests или AbstractTransactionalJUnit4SpringContextTests? –

+0

Весна 2.5, JUnit 4.4, и в основном AbstractAnnotationAwareTransactionalTests, хотя я подозреваю, что существует некоторая версия ползучести. Новые классы тестов могут простираться от новых лесов Spring. На данный момент я не исследовал все 138 тестовых классов. – Mojo

ответ

2

Действительно проблема связана с коррумпированным контекстом приложения Spring. Одним из ранних тестов является загрязнение контекста и устранение ошибок в следующих тестах.

Одна из трудностей заключается в попытке контролировать порядок испытаний при обнаружении теста, вызывающего проблемы.

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

Это был тест под названием TestSpringContexts. Добавление @DirtiesContext к этим тестам решает проблему, но это также было решено путем удаления вызовов из context.close() из тестов.

я писал в блоге о процессе здесь, но это суть дела: http://mojo.whiteoaks.com/2010/04/27/finding-the-test-that-corrupts-the-suite/

Mojo

1

With no apparent means to control the order of classes tested by Surefire, I have a difficult time determining which of my test classes seem to be leaving the context in a bad state.

Действительно. И запущенные подмножества тестов будут давать разные результаты (с точки зрения порядка выполнения), что очень затрудняет отладку вашей проблемы.

Но вы могли бы, возможно, использовать патч из SUREFIRE-321 (выполнения тестов в алфавитном порядке), чтобы получить лучший контроль (проверка комментариев, один из плаката столкнулась с очень похожей проблемой для вас).

Смежные вопросы