Запустите одиночный тест из класса JUnit с помощью командной строки - PullRequest
86 голосов
/ 15 февраля 2012

Я пытаюсь найти подход, который позволил бы мне запустить один тест из класса 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)
  • Избегайте изменения источника теста
  • Избегайте использования дополнительных инструментов

Ответы [ 3 ]

74 голосов
/ 15 февраля 2012

Вы можете довольно легко сделать кастомный скейнер 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 Iпришел к тому же выводу, что и вы, что JUnit не поддерживает это изначально.Для меня это никогда не было проблемой, так как все IDE имеют пользовательские интеграции JUnit, которые позволяют вам запускать тестовый метод под курсором, среди других действий.Я никогда не запускал тесты JUnit напрямую из командной строки;Я всегда позволял или IDE или инструменту сборки (Ant, Maven) заботиться об этом.Тем более, что точка входа CLI по умолчанию (JUnitCore) не выдает никакого результата, кроме ненулевого кода завершения при неудачном тесте (тестах).

ПРИМЕЧАНИЕ: для версии JUnit> = 4.9 необходимо hamcrest библиотека в classpath

40 голосов
/ 09 августа 2013

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

mvn -Dtest=GreatTestClass#testMethod test

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

Для более подробной информации, проверьте http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

0 голосов
/ 14 октября 2014

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

В основном, это включает 2 шага:

Шаг 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

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