it-swarm.com.ru

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

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

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

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

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

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

110
LiorH

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

46
Jon Skeet

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

138
JoelPM

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

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
78
gmoore

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

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

(@Ignore сообщает об этом как о игнорируемом, который я оставляю для временно игнорируемых тестов.)

35
froh42
  1. Если это ваш базовый тестовый класс, например AbstractTest, и все ваши тесты расширяют его, то определите этот класс как abstract
  2. Если это класс Util, то лучше удалить * Test из класса переименовать это MyTestUtil или Utils и т.д.
15
Raghu K Nair

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

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

8
Sridhar-Sarnobat

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

6
mc1arke

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

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

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

0
illuminatos

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

0
Rahul Vig