Миграция: с JUnit 3 на JUnit 4: TestSuite - PullRequest
4 голосов
/ 13 февраля 2012

Я недавно работал с JUnit 3, но я решил перейти на JUnit 4. Теперь я столкнулся со следующей проблемой:

Я использовал TestSuite с JUnit 3, где я запускал все java-Testclasses, имена которых соответствовали шаблону типа "* TestMe.java".

У меня есть сотня тестов, которые были названы так.

Теперь, с JUnit 4, я должен назвать их явно, чтобы вызвать их в TestSuite.

@RunWith(Suite.class)
@Suite.SuiteClasses(
{
    FirstTestMe.class,
    SecondTestMe.class,
    ThirdTestMe.class,

})
public class TestMe
{
    /**
     * Constructor.
     */
    private TestMe()
    {
        super();
    }
}

Это действительно неудобно, и я могу забыть перечислить некоторые тесты. Кроме того, когда я создаю новый, я должен добавить его туда.

Есть ли какое-нибудь решение, как вызвать эти тестовые классы с помощью регулярных выражений или что-то еще?

Кроме того, еще один вопрос: каждый метод, который не является тестом, но, возможно, используется в тестовом классе, должен быть аннотирован @Ignore? Я запускаю эти тестовые классы без каких-либо ошибок, так что я думаю, что в этом нет необходимости?

Ответы [ 4 ]

1 голос
/ 13 февраля 2012

Возможно, вы захотите взглянуть на сообщение migrate-tests-from-junit-3-to-junit-4 , в котором рассказывается, что именно вы хотите.

Посмотрите, есть ли Динамически создавать наборы тестов в JUnit 4 или Запускать все тесты в справке Junit 4 .

0 голосов
/ 25 февраля 2012

Есть библиотека с открытым исходным кодом ClasspathSuite . Он позволяет вам использовать регулярные выражения, чтобы указать, какие имена классов / пакетов должны быть или не должны включаться в ваш набор тестов.

Вот пример использования, который включает в себя все в двух пакетах, но не в третьем пакете. Это также исключает другой конкретный класс.

@ClassnameFilters( { "com.javaranch.*test.*", "net.jforum.*test.*", "!com.javaranch.test.web.*", "!.*All_JForum_Functional_Tests" })
0 голосов
/ 14 февраля 2012

Для вашего первого вопроса, если вы хотите использовать Test Suite в JUnit 4, тогда нет другого выбора, кроме как явно перечислить все классы.Однако, если вы хотите запустить все классы в пакете или в проекте, вы можете просто щелкнуть правой кнопкой мыши на пакете / проекте в Eclipse и выбрать Run as JUnit test.Если вы используете ant или maven surefire, вы можете указать тесты для запуска с * Test.java или аналогичным.

Вы не должны аннотировать те методы, которые не являются методами тестирования с @Ignore,Основное различие между JUnit 3 и JUnit 4 заключается в использовании аннотаций.Так что это JUnit3, вы расширяете TestCase и называете все ваши методы testXXX.В JUnit 4 вам не нужно расширять TestCase, но вы должны аннотировать все ваши методы тестирования с помощью @Test.Поэтому любые методы, не отмеченные @Test, не запускаются в качестве теста.Конечно, есть и другие аннотации, такие как @Before и @After, которые заменяют setUp() и tearDown().

0 голосов
/ 13 февраля 2012

Добавьте аннотацию @Test над вашим методом тестирования.

public class TestMe
{
    @Before
    public void setUp() {

    }

    @Test
    public void myFirstTest() {
    }

}
...