Запуск одиночного теста из класса JUnit с использованием командной строки

Я пытаюсь найти подход, который позволит мне запустить один тест из класса JUnit, используя только командную строку и java.

Я могу запустить весь набор тестов из класса, используя следующее:

java -cp .... org.junit.runner.JUnitCore org.package.classname

Я действительно хочу сделать что-то вроде этого:

java -cp .... org.junit.runner.JUnitCore org.package.classname.method

или

java -cp .... org.junit.runner.JUnitCore org.package.classname#method

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

Так что мне интересно, есть ли способ сделать это?


Ключевые моменты, которые я ищу:

  • Возможность запуска одного теста из тестового класса JUnit
  • Командная строка (с помощью JUnit)
  • Избегайте изменения источника тестирования
  • Избегайте использования дополнительных инструментов.

Ответ 1

Вы можете сделать обычную, barebone JUnit бегун довольно легко. Здесь тот, который будет запускать один тестовый метод в форме com.package.TestClass#methodName:

import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;

public class SingleJUnitTestRunner {
    public static void main(String... args) throws ClassNotFoundException {
        String[] classAndMethod = args[0].split("#");
        Request request = Request.method(Class.forName(classAndMethod[0]),
                classAndMethod[1]);

        Result result = new JUnitCore().run(request);
        System.exit(result.wasSuccessful() ? 0 : 1);
    }
}

Вы можете вызвать его так:

> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner 
    com.mycompany.product.MyTest#testB

После быстрого просмотра источника JUnit я пришел к тому же выводу, что и JUnit не поддерживает это изначально. Это никогда не было проблемой для меня, так как у IDE есть обычная интеграция JUnit, которая позволяет вам запускать тестовый метод под курсором, среди других действий. Я никогда не запускал тесты JUnit из командной строки; Я всегда позволял этому инструменту IDE или build (Ant, Maven) позаботиться об этом. Тем более, что точка входа CLI по умолчанию (JUnitCore) не производит никакого результата результата, отличного от ненулевого кода выхода при неудачных тестах.

Примечание: для версии JUnit >= 4.9 вам нужна hamcrest библиотека в пути к классам

Ответ 2

Я использую Maven для создания моего проекта и использую плагин SureFire maven для запуска тестов junit. Если у вас есть эта настройка, вы можете сделать:

mvn -Dtest=GreatTestClass#testMethod test

В этом примере мы просто запускаем тестовый метод с именем "testMethod" в классе "GreatTestClass".

Подробнее см. http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

Ответ 3

Мы использовали IntelliJ, и потратили немало времени, пытаясь понять это.

В основном, он включает в себя два шага:

Шаг 1: Скомпилируйте тестовый класс

% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java

Шаг 2: Запустите тест

% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest