2010-03-30 4 views
37

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

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

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

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

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

+0

Вы можете высмеять ваши ресурсы или что-то еще, запуск теста в Java-приложении не имеет для меня никакого смысла. Взгляните на jmock.org – ant

ответ

74

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

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

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

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

Следует иметь в виду несколько осложнений, использующих этот вид метода:

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

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

+0

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

+1

Ниже приведен код запуска JUnit в вашем основном и базового вывода в стандартном выходе: 'JUnitCore junitCore = new JUnitCore(); junit.addListener (новый TextListener (System.out)); junit.run ( .class); «Извините за формат, но это лучшее, что я могу сделать в комментарии. :) – RobMcZag

11

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

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

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

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

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

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

Смежные вопросы