JUnit: как избежать "не запускаемых методов" в классах тестовых utils

Я перешел на JUnit4.4 с JUnit3.8. Я запускаю свои тесты с помощью ant, все мои тесты выполняются успешно, но тесты классов служебных программ выходят из строя с ошибкой "Нет runnable methods". Я использую шаблон, который включает все классы с именем * Test * в тестовой папке.

Я понимаю, что бегун не может найти какой-либо метод, аннотированный атрибутом @Test. Но они не содержат такой аннотации, потому что эти классы не являются испытаниями. Удивительно, но при запуске этих тестов в eclipse он не жалуется на эти классы.

В JUnit3.8 это не было проблемой, поскольку эти классы полезности не расширяли TestCase, поэтому бегун не пытался их выполнить.

Я знаю, что я могу исключить эти конкретные классы в цель junit в ant script. Но я не хочу менять файл сборки на каждый новый класс утилиты, который я добавляю. Я также могу переименовать классы (но предоставление хороших имен классам всегда было моим самым слабым талантом:-))

Есть ли элегантное решение этой проблемы?

Ответ 1

Предполагая, что вы контролируете шаблон, используемый для поиска тестовых классов, я бы предложил изменить его, чтобы он соответствовал *Test, а не *Test*. Таким образом TestHelper не будет соответствовать, но FooTest будет.

Ответ 2

Аннотировать свои классы использования с помощью @Ignore. Это заставит JUnit не пытаться запускать их в качестве тестов.

Ответ 3

У моего конкретного случая есть следующий сценарий. Наши тесты

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

Ответ 4

Чтобы JUnit не создавал экземпляр базового класса, просто сделайте его

public abstract class MyTestBaseClass { ... whatever... }

(@Игнорировать сообщения как игнорируемые, которые я резервирую для временно проигнорированных тестов.)

Ответ 5

  • Если это ваш базовый тестовый класс, например AbstractTest, и все ваши тесты расширяются, тогда этот класс следует определить как abstract
  • Если это класс Util, то лучше удалить * Тест из класса переименовать, это MyTestUtil или Utils и т.д.

Ответ 6

Будьте внимательны при использовании дополнения кода IDE, чтобы добавить импорт для @Test.

Это должен быть import org.junit.Test а не import org.testng.annotations.Test, например. Если вы сделаете последнее, вы получите ошибку "нет запускаемых методов".

Ответ 7

Ant теперь поставляется с атрибутом skipNonTests который был разработан, чтобы делать именно то, что вы ищете. Не нужно менять свои базовые классы на абстрактные или добавлять к ним аннотации.

Ответ 8

Как насчет добавления пустого тестового метода для этих классов?

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
    assertTrue(true); // do nothing;
}

Ответ 9

Я также столкнулся с аналогичной проблемой ( "no runnable methods.." ) при запуске простейшего простого кода (с помощью @Test, @Before и т.д.) и не нашел решения нигде. Я использовал Junit4 и Eclipse SDK версии 4.1.2. Решил мою проблему, используя последнюю версию Eclipse SDK 4.2.2. Надеюсь, это поможет людям, которые борются с несколько схожими проблемами.

Ответ 10

В вашем тестовом классе, если написал import org.junit.jupiter.api.Test; удалите его и напишите import org.junit.Test; В этом случае это сработало и у меня.