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

Как запустить тесты JUnit из моего java-приложения?

Можно ли запускать тесты JUnit из моего java-приложения?

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

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

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

Есть ли простая тестовая среда, которая запускает тесты и выводит результаты из приложения Java, или я вынужден написать свою собственную инфраструктуру?

4b9b3361

Ответ 1

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

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

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

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

Также обратите внимание на несколько осложнений с использованием этого метода:

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

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

Ответ 2

Как описано в JUnit FAQ:

public static void main(String args[]) {
  org.junit.runner.JUnitCore.main("junitfaq.SimpleTest");
}

Ответ 3

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

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

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

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

Ответ 4

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

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

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