Проблемы с загрузкой классов в maven2 с JUnit - PullRequest
4 голосов
/ 26 августа 2009

У меня есть проект, который строится с помощью maven2 и запускает серию тестов JUnit для кода. До этого момента это работало нормально, и теперь у меня есть 2 теста, которые должны выполняться в определенной последовательности, чтобы все работало правильно, скажем, TestA и Test (A затем B). К сожалению, maven2 не понимает этого, поэтому я ищу способ убедить его в том, что он должен запускать тесты в таком порядке.

Проблема в том, что я устанавливаю некоторые окончательные статические поля в TestB, но я делаю это из TestA, который сам использует эти поля, и успешное выполнение теста зависит от того, для этих полей установлены новые значения ( тут абсолютно нет пути, иначе я бы пошел по этому пути задолго до этого). Таким образом, обязательно, чтобы TestA загружалась первой, и это, конечно же, приводило к загрузке TestB при попытке доступа к нему. Однако maven2 решил, что он будет запускать TestB, а затем TestA, что означает, что эти окончательные поля уже установлены и не могут быть изменены.

Итак, я ищу способ указать порядок, в котором выполняются тесты (A затем B, каждый раз), или способ легко перезагружать TestB любым загрузчиком классов, который использует JUnit.

РЕДАКТИРОВАТЬ - еще одна опция может быть какой-то опцией, как у старого инструмента с графическим интерфейсом JUnit, которая приводит к перезагрузке всех классов для каждого теста. Я посмотрел и посмотрел и не нашел такой флаг в плагине maven junit, если такая вещь существует, то это также будет работать.

Ответы [ 2 ]

4 голосов
/ 26 августа 2009

Режим Fork может заставить каждый тест выполняться в своей собственной JVM, поэтому каждый класс перезагружается для каждого теста.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      <forkMode>pertest</forkMode>
    </configuration>
  </plugin>
1 голос
/ 26 августа 2009

Порядок тестирования в JUnit намеренно не определен, это не проблема Maven, и, вероятно, просто повезло, что ваши тесты работали нормально до сих пор.

Ответ Сэла напрямую касается вашего вопроса, однако разветвление JVM в каждом тесте для большого количества тестов может значительно увеличить время сборки.

Альтернативным подходом было бы использование библиотеки тестирования, такой как PowerMock (в настоящее время она работает с EasyMock и Mockito), для очистки статических полей в инициализации TestB, что позволяет избежать необходимости разветвления JVM, и гарантирует, что ваши тесты переносимы.

С веб-сайта PowerMock:

PowerMock - это инфраструктура, которая расширяет другие фиктивные библиотеки, такие как EasyMock, более мощными возможностями. PowerMock использует пользовательский загрузчик классов и манипуляции с байт-кодами, чтобы включить моделирование статических методов, конструкторов, конечных классов и методов, частных методов, удаление статических инициализаторов и многое другое. Используя пользовательский загрузчик классов, не нужно вносить изменения в IDE или серверы непрерывной интеграции, что упрощает адаптацию. Разработчики, знакомые с EasyMock, найдут PowerMock простым в использовании, поскольку весь API-интерфейс ожидания одинаков как для статических методов, так и для конструкторов. PowerMock расширяет API EasyMock небольшим количеством методов и аннотаций для включения дополнительных функций. Начиная с версии 1.1 PowerMock также имеет базовую поддержку Mockito.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...