Итак, @Ignore
аннотация хороша для обозначения того, что тестовый пример не должен выполняться.
Однако иногда я хочу игнорировать тест, основанный на информации времени выполнения. Примером может быть, если у меня есть тест параллелизма, который должен быть запущен на машине с определенным количеством ядер. Если бы этот тест выполнялся на однопроцессорной машине, я не думаю, что было бы правильно просто пройти тест (так как он не был запущен), и, конечно, было бы неправильно проваливать тест и нарушать сборку. ,
Поэтому я хочу иметь возможность игнорировать тесты во время выполнения, так как это выглядит как правильный результат (поскольку среда тестирования позволит выполнить сборку, но записать, что тесты не выполнялись). Я вполне уверен, что аннотация не даст мне такой гибкости, и подозреваю, что мне нужно будет вручную создать набор тестов для рассматриваемого класса. Однако в документации ничего не говорится об этом, и, просматривая API , также неясно, как это будет сделано программно (то есть, как мне программно создать экземплярTest
или аналог, который эквивалентен тому, который создан @Ignore
аннотацией?).
Если кто-то делал что-то подобное в прошлом или имел блестящее представление о том, как еще я мог бы пойти по этому поводу, я был бы рад услышать об этом.
источник
@BeforeClass
аннотация, где вы можете потерпеть неудачу в своем предположении, что пропустит весь класс. Другое@ClassRule
(для мелкозернистого контроля, но для всего класса, один раз).Вы должны оформить заказ
Junit-ext
. У них естьRunIf
аннотация, которая выполняет условные тесты, такие как:[Пример кода взят из их учебника]
источник
Assume
непосредственно, чтобы не вводить другую зависимость.@RunIf
отделяет условие, когда тест должен выполняться от фактического кода теста, что я считаю хорошим. Что мне не нравится, так это то, что для этого нужен конкретный участник теста. Поэтому я написал правило JUnit для условного игнорирования тестов.В JUnit 4 другой вариант для вас может состоять в том, чтобы создать аннотацию, обозначающую, что тест должен соответствовать вашим настраиваемым критериям, а затем расширить бегун по умолчанию своим собственным и, используя рефлексию, основывать свое решение на пользовательских критериях. Это может выглядеть примерно так:
источник
BlockJUnit4ClassRunner
не предлагает этотisIgnored
метод.Быстрое примечание:
Assume.assumeTrue(condition)
игнорирует остальные шаги, но проходит тест. Чтобы провалить тест, используйтеorg.junit.Assert.fail()
внутри условного оператора. Работает так же, как,Assume.assumeTrue()
но не проходит тест.источник