Как я запускаю тесты JUnit из своего JAVA-приложения?

Действительно ли возможно запустить тесты JUnit из моего JAVA-приложения?

Есть ли среды тестирования, которые я могу использовать (такие как JUnit.jar?), или, я вызываю, чтобы найти тестовые файлы, вызвать методы и отследить исключения сам?

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

Легче запустить приложение и затем в выполнении приложения мои тесты.

Существует ли легкая среда тестирования, которая запускает тесты и выходные результаты из JAVA-приложения, или я вынужден записать свою собственную платформу?

52
задан Josh Crozier 8 December 2013 в 17:42
поделиться

4 ответа

Да, можно. Я делал это пару раз, чтобы запустить диагностические / дымовые тесты в производственных системах. Это фрагмент ключевой части кода, вызывающего JUnit:

JUnitCore junit = new JUnitCore();
Result result = junit.run(testClasses);

НЕ используйте JUnit.main внутри вашего приложения, он вызывает System.exit после завершения тестов и, таким образом, это может остановить процесс JVM.

Вы можете захотеть захватить «обычный» консольный вывод JUnit (точки и простой отчет). Это легко сделать, зарегистрировав TextListener (этот класс предоставляет этот простой отчет).

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

  1. Тестирование любой «тестовой среды», в том числе такой небольшой, хотя это довольно просто, может сбивать с толку. Например, если вы хотите проверить, возвращает ли ваша «тестовая среда» результат сбоя при сбое одного из тестов, вы можете (должны?) Создать образец теста JUnit, который всегда дает сбой, и выполнить этот тест с «тестовой структурой». В этом случае неудачный тестовый пример на самом деле является тестовыми данными и не должен выполняться как «обычный» JUnit. Пример таких тестов можно найти во внутренних тестовых примерах JUnit.

  2. Если вы хотите подготовить / отобразить свой собственный отчет, вам лучше зарегистрировать свой собственный RunListener , потому что результат, возвращаемый JUnit, не содержит (напрямую) информацию о пройденных тестах и ​​методе тестирования (это только "жестко запрограммированы" как часть теста Описание ).

85
ответ дан 7 November 2019 в 09:13
поделиться

Согласно JUnit API, JUnitCore имеет несколько методов для выполнения тестов внутри Java.

Спасибо Томиславу Накич-Альфиревичу за указание на это.

http://junit.sourceforge.net/javadoc/org/junit/runner/JUnitCore.html

2
ответ дан 7 November 2019 в 09:13
поделиться

Как указано в JUnit FAQ :

public static void main(String args[]) {
  org.junit.runner.JUnitCore.main("junitfaq.SimpleTest");
}
15
ответ дан 7 November 2019 в 09:13
поделиться

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

Вам нужно удалить эти зависимости из кода, который вы тестируете. Зависимости и конфигурации - это именно то, чего вы пытаетесь избежать при написании тестового фреймворка. Для каждого теста вы должны ориентироваться на наименьшую тестируемую часть приложения.

Например, если вам требуется подключение к базе данных для выполнения какого-либо процесса в классе, который вы пытаетесь протестировать - отделите объект обработки базы данных от вашего класса, передайте его через конструктор или метод сеттера, а в своем тесте используйте такой инструмент, как JMock (или напишите класс-заглушку) для создания поддельного объекта обработки базы данных. Таким образом, вы убедитесь, что тесты не зависят от конкретной конфигурации базы данных, и вы тестируете только небольшую часть кода, которая вас интересует, а не весь слой обработки базы данных.

Поначалу это может показаться большой работой, но такой рефакторинг - это именно то, чем должна быть наполнена ваша тестовая структура. Возможно, вам будет полезно приобрести книгу по тестированию программного обеспечения в качестве справочника по отсоединению зависимостей. Это окупится гораздо больше, чем попытки загрузить JUnit изнутри вашего работающего приложения.

10
ответ дан 7 November 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: