Подтвердить что ты не робот

Запуск всех тестов в Junit 4

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

Я пробовал вариант "Новый... → Тест-пакет" в Eclipse, но, похоже, он работает только для JUnit 3, идентифицируя тесты по их расширению от TestCase

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

Спасибо заранее!

4b9b3361

Ответ 1

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

@RunWith(Suite.class)
@Suite.SuiteClasses({ PackageFooSuite.class, PackageBarSuite.class} )
public final class AllTestsSuite {} // or ModuleFooSuite, and that in AllTests

Ответ 2

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

Я сделал это с 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);
        }
}

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

  • Скачан cp-1.2.6.jar
  • Создайте ранее упомянутый RunAllSuite
  • Скомпилируйте класс javac RunAllSuite.java -cp cpsuite-1.2.6.jar;junit-4.8.1.jar
  • запустите его с целевыми тестами в пути класса, 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

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

Ответ 4

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

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

Дополнительная информация о сканировании классов и настраиваемых фильтрах здесь

Ответ 5

С Eclipse Indigo (возможно, Helios также) в диалоговом окне Run Configurations у вас теперь есть возможность запускать все тесты в выбранной проектной, пакетной или исходной папке.

Также хорошей ссылкой из Eclipse является статья тестирование модуля Java с помощью JUnit 4.x в Eclipse.

Ответ 6

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

В этом проекте будут выполняться все тесты. То же самое для пакета.