Интеграционные тесты случайно дают сбой или выдают ошибку при запуске maven

1

Я запускаю набор интеграционных тестов с использованием maven, и около 10% тестов не срабатывают или выдают ошибку. Однако, когда я запускаю сервер и запускаю отдельные неудачные тесты вручную из моей IDE (intellij idea), все они проходят без проблем. Что может быть причиной этой проблемы?

  • 3
    В чем ошибка? Возможно, вы не очищаете свои ресурсы должным образом между каждым тестом. Это может объяснить, почему они проходят, когда запускаются индивидуально, но не работают, когда запускаются вообще.
  • 0
    Я все время работаю с mvn clean install, так что я считаю, что ресурсы чистые, или вы имеете в виду очистить весь репозиторий .m2 и снова запустить тесты?
Показать ещё 3 комментария
Теги:
maven
intellij-idea
integration-testing
maven-plugin

1 ответ

2

Это почти всегда связано с тем, что единичные тесты работают в непоследовательном порядке или состояние гонки между двумя тестами, проходящими параллельно с помощью разветвленных тестов. Если первый тест заканчивается, он проходит. Но если тест №2 заканчивается первым, он оставляет тестовый ресурс, такой как тестовая база данных, в альтернативном состоянии, вызывающем потерю теста №1. Это очень часто встречается при тестировании базы данных, особенно когда один или несколько изменяют базу данных. Даже в IDEA вы можете найти все тесты в классе com.example.FooTest всегда передаются при запуске этого класса. Но если вы запустите все тесты в пакете com.example или все тесты в проекте, иногда (или даже всегда) тест в FooTest завершается с ошибкой.

Исправление состоит в том, чтобы гарантировать, что ваши тесты всегда гарантируют согласованное состояние при запуске. (Это руководящий принцип для хороших модульных тестов.) Вам нужно обратить внимание на настройку тестирования и @Before с помощью @Before, @BeforeClass, @After и @AfterClass аннотации (или эквиваленты TestNG). Я рекомендую database unit testing best practices Google. Для тестов базы данных выполнение тестов в транзакции может предотвратить эти проблемы. Таким образом, база данных возвращается в исходное состояние независимо от того, проходит или не проходит тест. Spring имеет отличную поддержку тестов детабазы JDBC. (Даже если ваш проект не является проектом Spring, классы могут быть очень полезными.) Прочитайте раздел 11.2.2 Поддержка тестирования модуля. Изучите классы AbstractTransactionalJUnit4SpringContextTests/AbstractTransactionalTestNGSpringContextTests и аннотацию @TransactionConfiguration (эта последняя из запущенных Spring Contexts). Существуют также другие инструменты для тестирования баз данных, такие как DbUnit.

  • 0
    Есть ли способ заставить тесты запускаться всегда в одном и том же порядке?
  • 0
    ИДЕЯ не делает этого, так как придерживается философии следования передовым практикам и недопущения «далеко не идеальных практик». В идеале юнит-тесты должны быть независимы друг от друга. Лучшим решением было бы использование методов @ BeforeTest / setup () и / или @ AfterTest / teardown () для приведения тестовой среды в известное базовое состояние. И если бы IDEA позволяла запускать тесты в определенном порядке, у разных IDE или систем сборки все равно были бы проблемы. Тем не менее, JUnit 4.11 добавил возможность иметь некоторый контроль над тестами, выполняемыми через @FixMethodOrder. Смотрите ответ № 2 на stackoverflow.com/q/3693626
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню