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