Запустите все тесты в Junit 4 - PullRequest
31 голосов
/ 12 февраля 2010

Я хочу иметь возможность запускать все тесты в проекте программно. Я знаю, что Eclipse имеет конфигурацию «Запуск от имени JUnit», которая каким-то образом захватывает все тесты в проекте и запускает их. Могу ли я программно получить список тестов и запустить их? Или есть какой-то хороший способ создать набор тестов, содержащий все тестовые наборы, не перечисляя вручную каждый (все 700+) из них?

Я пробовал опцию «New ... -> Test Suite» в Eclipse, но, похоже, это работает только для JUnit 3, определяя тесты по их расширению из TestCase

Тестовые классы - это JUnit 4, поэтому их единственной отличительной характеристикой является аннотация, отсутствие соглашения о присвоении имен, отсутствие подклассов из TestCase.

Заранее спасибо!

Ответы [ 7 ]

22 голосов
/ 13 февраля 2010

Хотя это на самом деле не решает вашу непосредственную проблему, я считаю очень полезной общую практику создания наборов и наборов наборов, например, для пакета, например, PackageFooSuite и т. д., и снова соберите эти наборы в один или несколько наборов, например ModuleFooSuite, и получите один пакет верхнего уровня, например AllTestsSuite. Таким образом, легко выполнить оба теста за один шаг, а также тесты подмодулей для пакета, над которым я сейчас работаю (и тесты будут выполняться быстрее, чем если бы я всегда выполнял все из них):

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests
15 голосов
/ 23 марта 2014

Ни один из других ответов не сделал это для меня. У меня было 40 тыс. Тестов, которые мне нужно было выполнить, поэтому перечисление каждого класса вручную было невозможным.

Я сделал это с ClasspathSuite . Набор тестов, который запускает все тестовые случаи Junit4 и Junit3 в пути к классам, выглядит следующим образом:

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        /* main method not needed, but I use it to run the tests */
        public static void main(String args[]) {
                JUnitCore.runClasses(RunAllSuite.class);
        }
}

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

  1. Загружено cp-1.2.6.jar
  2. Создать ранее упомянутый RunAllSuite
  3. Скомпилируйте класс, javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
  4. запустить его с целевыми тестами в пути к классам, java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar;path/to/runallsuite/folder;target/classes;target/test-classes RunAllSuite

И это все. С помощью вышеупомянутого RunAllSuite в любом месте вашего кода вы можете просто выполнить JUnitCore.runClasses (RunAllSuite.class), который выполняет все тесты в пути к классам. Есть и другие параметры конфигурации, которые описаны на домашней странице ClasspathSuite.

Обратите внимание, что приведенный выше класс ничего не печатает. Если это необходимо, вы можете сделать

import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.extensions.cpsuite.ClasspathSuite.*;
import org.junit.runner.RunWith;
import org.junit.runner.JUnitCore;
import org.junit.internal.TextListener;
import static org.junit.extensions.cpsuite.SuiteType.*;

@RunWith(ClasspathSuite.class)
@SuiteTypes({ JUNIT38_TEST_CLASSES, TEST_CLASSES })
public class RunAllSuite {
        public static void main(String args[]) {
                JUnitCore junit = new JUnitCore();
                junit.addListener(new TextListener(System.out));
                junit.run(RunAllSuite.class);
        }
}
3 голосов
/ 10 октября 2016

В Eclipse (я использую 4.6.1) - щелкните правой кнопкой мыши папку проекта, выберите «Запуск от имени», выберите «Тест JUnit»

Он запустит все тесты в этом проекте. То же самое для пакета.

3 голосов
/ 12 февраля 2010

Вы можете сделать это довольно легко изнутри maven, используя плагин surefire : я обычно очищаю / компилирую / устанавливаю свои проекты из командной строки, прежде чем сравнивать их для использования затмения (mvn eclipse:clean eclipse:eclipse), и вы можете определите набор тестов в вашем pom, в котором перечислены все тесты, которые вы хотите запускать в массовом порядке при каждом запуске mvn install. Вы не называете их программно, точно, но вы, конечно, можете называть их массово.

2 голосов
/ 31 декабря 2010

верхней части моей головы, используя Spring:

  • Реализация TypeFilter, который сопоставляет классы с методами, аннотированными @Test (не забудьте рассмотреть суперклассы)
  • Вызов сканирования пути к классам в вашем самом тестовом пакете
  • Вызов JUnitRunner с результатами сканирования

Подробнее о сканировании пути к классам и пользовательских фильтрах здесь

1 голос
/ 07 марта 2012

Благодаря Eclipse Indigo (возможно, и Helios) в диалоговом окне «Выполнить конфигурации» у вас теперь есть возможность запускать все тесты в выбранном проекте, пакете или исходной папке.

Также хорошим справочником от Eclipse является статья Юнит-тестирование Java с JUnit 4.x в Eclipse .

0 голосов
/ 10 февраля 2011

Я также рекомендую использовать аннотации JUnit Suite. Для более подробной информации перейдите по ссылке .

...