Я перешел на JUnit4.4 с JUnit3.8. Я запускаю свои тесты с помощью ant, все мои тесты выполняются успешно, но тестовые служебные классы не работают с ошибкой «Нет исполняемых методов». Я использую шаблон, чтобы включить все классы с именем * Test * в тестовую папку.
Я понимаю, что бегун не может найти метод, помеченный атрибутом @Test. Но они не содержат такой аннотации, потому что эти классы не являются тестами. Удивительно, но при запуске этих тестов в eclipse он не жалуется на эти классы.
В JUnit3.8 это не было проблемой, поскольку эти служебные классы не расширяли TestCase, поэтому бегун не пытался их выполнить.
Я знаю, что могу исключить эти конкретные классы из цели junit в скрипте ant. Но я не хочу изменять файл сборки при каждом добавлении нового служебного класса. Я также могу переименовывать классы (но давать классам хорошие имена всегда было моим самым слабым талантом :-))
Есть ли изящное решение этой проблемы?
Ответы:
Предполагая, что вы контролируете шаблон, используемый для поиска тестовых классов, я бы предложил изменить его на соответствие,
*Test
а не*Test*
. ТакTestHelper
не получится, ноFooTest
будет.источник
Аннотируйте свои служебные классы с помощью @Ignore. Это заставит JUnit не пытаться запускать их как тесты.
источник
Мой конкретный случай имеет следующий сценарий. Наши тесты
все расширяются
и JUnit пытался запустить BaseTixContainerTest. Бедный BaseTixContainerTest просто пытался настроить контейнер, настроить клиента, заказать пиццу и расслабиться ... чувак.
Как упоминалось ранее, вы можете аннотировать класс с помощью
Но это заставило JUnit сообщить, что этот тест пропущен (а не полностью проигнорирован).
Это меня раздражало.
Итак, я сделал BaseTixContainerTest абстрактным, и теперь JUnit действительно игнорирует его.
источник
@Ignore
Чтобы JUnit не создавал экземпляр вашего тестового базового класса, просто сделайте его
(@Ignore сообщает, что он игнорируется, что я оставляю для временно игнорируемых тестов.)
источник
protected abstract class
.источник
Будьте осторожны при использовании автозавершения кода в среде IDE для добавления импорта для
@Test
.Так должно быть,
import org.junit.Test
а неimport org.testng.annotations.Test
, например. Если вы сделаете последнее, вы получите ошибку «Нет запускаемых методов».источник
org.junit.jupiter.api.Test
вместо этого! но благодаря вам теперь это решеноТеперь Ant поставляется с
skipNonTests
атрибутом, который был разработан, чтобы делать именно то, что вы, кажется, ищете. Не нужно менять базовые классы на абстрактные или добавлять к ним аннотации.источник
skipNonTests
атрибут доступен только в ant 1.9+, что очень досадно, так как он выглядит невероятно полезным. Это также исключит абстрактные тестовые суперклассы.А что насчет добавления к этим классам пустого тестового метода?
источник
В вашем тестовом классе, если вы написали import org.junit.jupiter.api.Test; удалите его и напишите import org.junit.Test; В этом случае это сработало и у меня.
источник
@BeforeAll
и@AfterAll
не запускаются.@BeforeClass
and@AfterClass
, но с JUnit5 нет. Ссылка: junit.org/junit5/docs/current/user-guide/#migrating-from-junit4Я также столкнулся с аналогичной проблемой («нет запускаемых методов ...») при запуске самого простого или простого фрагмента кода (с использованием @Test, @Before и т. Д.) И нигде не нашел решения. Я использовал Junit4 и Eclipse SDK версии 4.1.2. Решил мою проблему, используя последнюю версию Eclipse SDK 4.2.2. Я надеюсь, что это поможет людям, которые борются с похожей проблемой.
источник