Ответ 1
Предполагая, что вы контролируете шаблон, используемый для поиска тестовых классов, я бы предложил изменить его, чтобы он соответствовал *Test
, а не *Test*
. Таким образом TestHelper
не будет соответствовать, но FooTest
будет.
Я перешел на JUnit4.4 с JUnit3.8. Я запускаю свои тесты с помощью ant, все мои тесты выполняются успешно, но тесты классов служебных программ выходят из строя с ошибкой "Нет runnable methods". Я использую шаблон, который включает все классы с именем * Test * в тестовой папке.
Я понимаю, что бегун не может найти какой-либо метод, аннотированный атрибутом @Test. Но они не содержат такой аннотации, потому что эти классы не являются испытаниями. Удивительно, но при запуске этих тестов в eclipse он не жалуется на эти классы.
В JUnit3.8 это не было проблемой, поскольку эти классы полезности не расширяли TestCase, поэтому бегун не пытался их выполнить.
Я знаю, что я могу исключить эти конкретные классы в цель junit в ant script. Но я не хочу менять файл сборки на каждый новый класс утилиты, который я добавляю. Я также могу переименовать классы (но предоставление хороших имен классам всегда было моим самым слабым талантом:-))
Есть ли элегантное решение этой проблемы?
Предполагая, что вы контролируете шаблон, используемый для поиска тестовых классов, я бы предложил изменить его, чтобы он соответствовал *Test
, а не *Test*
. Таким образом TestHelper
не будет соответствовать, но FooTest
будет.
Аннотировать свои классы использования с помощью @Ignore. Это заставит JUnit не пытаться запускать их в качестве тестов.
У моего конкретного случая есть следующий сценарий. Наши тесты
public class VenueResourceContainerTest extends BaseTixContainerTest
все расширяются
BaseTixContainerTest
и JUnit пытался запустить BaseTixContainerTest. Бедный BaseTixContainerTest просто пытался настроить контейнер, настроить клиента, заказать пиццу и расслабиться... человек.
Как уже упоминалось ранее, вы можете аннотировать класс с помощью
@Ignore
Но это заставило JUnit сообщить об этом тесте как пропущенном (в отличие от полностью игнорируемого).
Tests run: 4, Failures: 0, Errors: 0, Skipped: 1
Это меня раздражало.
Итак, я сделал реферат BaseTixContainerTest, и теперь JUnit действительно игнорирует его.
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
Чтобы JUnit не создавал экземпляр базового класса, просто сделайте его
public abstract class MyTestBaseClass { ... whatever... }
(@Игнорировать сообщения как игнорируемые, которые я резервирую для временно проигнорированных тестов.)
Будьте внимательны при использовании дополнения кода IDE, чтобы добавить импорт для @Test
.
Это должен быть import org.junit.Test
а не import org.testng.annotations.Test
, например. Если вы сделаете последнее, вы получите ошибку "нет запускаемых методов".
Ant теперь поставляется с атрибутом skipNonTests
который был разработан, чтобы делать именно то, что вы ищете. Не нужно менять свои базовые классы на абстрактные или добавлять к ним аннотации.
Как насчет добавления пустого тестового метода для этих классов?
public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
assertTrue(true); // do nothing;
}
Я также столкнулся с аналогичной проблемой ( "no runnable methods.." ) при запуске простейшего простого кода (с помощью @Test, @Before и т.д.) и не нашел решения нигде. Я использовал Junit4 и Eclipse SDK версии 4.1.2. Решил мою проблему, используя последнюю версию Eclipse SDK 4.2.2. Надеюсь, это поможет людям, которые борются с несколько схожими проблемами.
В вашем тестовом классе, если написал import org.junit.jupiter.api.Test; удалите его и напишите import org.junit.Test; В этом случае это сработало и у меня.