JUnit 5 @EnabledIfSystemProperty не работает должным образом - PullRequest
0 голосов
/ 04 августа 2020

Я перенес свой тест с JUnit 4 на JUnit 5. Все работает нормально, но перевод моей предыдущей аннотации:

@IfProfileValue(name = "run.import.tests", values = {"true"})

в

@EnabledIfSystemProperty(named = "run.import.tests", matches = "true")

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

-Drun.import.tests=true

, только если я его прошел, они запускались. С Junit 5, даже с аннотацией @EnabledIfSystemProperty(named = "run.import.tests", matches = "true"), тест запускается, даже если аргумент run.import.tests не установлен.

Я что-то делаю не так?

1 Ответ

2 голосов
/ 04 августа 2020

Чтобы он работал, необходимо добавить "противоположную" аннотацию, чтобы они оба вместе выглядели так:

@EnabledIfSystemProperty(named = "run.import.tests", matches = "true")
@DisabledIfSystemProperty(named = "run.import.tests", matches = "(?!true)")

Я проверил это, и тестовый класс отключен, если run.import.tests свойство не установлено или установлено любое другое значение, кроме true; если установлено значение true - тестовый класс не отключен.

Любопытно, что в документации @ EnabledIfSystemProperty указано:

Если указанное системное свойство не определено, аннотированный класс или метод будет отключен.

Но это не так и может быть ошибкой. Я попробую отладить классы JUnit, и если я создам проблему на их GitHub, я свяжу их здесь.

Я просмотрел код и протестировал его еще несколько раз - вот сводка:

  1. Когда я запускаю тест с помощью Maven (mvn test), появляется аннотация @EnabledIfSystemProperty один работает нормально - тест запускается только тогда, когда я добавляю аргумент -Drun.import.tests=true. @DisabledIfSystemProperty в этом случае не требуется.
  2. Когда я запускаю тест с использованием IntelliJ, обработка свойства Run XxxTest работала нормально, только если присутствовали обе аннотации. После некоторой отладки я наткнулся на JupiterTestEngine - класс, который запускается внешними программами запуска (Maven, IntelliJ, любые другие). Кажется, что IntelliJ добавляет свойство к своей тестовой программе запуска: junit.jupiter.conditions.deactivate , что обычно полезно - благодаря этому мы можем запускать даже тесты, которые отключены с условными аннотациями локально, игнорируя их. Значение свойства: org.junit.*Enabled*Condition, когда @DisabledIfSystemProperty отсутствует, и org.junit.*Disabled*Condition, когда он есть - условия являются расширениями JUnit, которые разрешают отключенное состояние для теста.

Функциональность, описанная в (2) обычно полезен, но в вашем случае это выглядело так, будто аннотация не работает. На самом деле он работает, но IntelliJ просто его обходит.

...