JUnit: как избежать «никаких запускаемых методов» в тестовых утилитных классах - PullRequest
109 голосов
/ 23 марта 2009

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

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

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

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

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

Ответы [ 10 ]

138 голосов
/ 11 июня 2009

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

78 голосов
/ 10 июня 2010

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

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
46 голосов
/ 23 марта 2009

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

35 голосов
/ 22 мая 2012

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

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

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

15 голосов
/ 03 февраля 2016
  1. Если это ваш базовый класс тестирования, например AbstractTest, и все ваши тесты расширяют его, тогда определите этот класс как abstract
  2. Если это класс Util, то лучше удалить * Test из класса переименовать это MyTestUtil или Utils и т. Д.
8 голосов
/ 04 августа 2015

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

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

5 голосов
/ 01 апреля 2014

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

4 голосов
/ 23 марта 2009

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

public void avoidAnnoyingErrorMessageWhenRunningTestsInAnt() {
    assertTrue(true); // do nothing;
}
0 голосов
/ 22 марта 2018

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

0 голосов
/ 24 апреля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...