Су, вы уже смотрите все выступления дяди Боба Мартина на Youtube, читаете одно или два руководства по jUnit и хотите дать тестовой разработке (TDD) шанс (Не пытайтесь, иначе Йода и мистер Мияги расстроятся, если вы просто « попробуйте »), возможно, вы захотите оставить всю работу по настройке Maven или вашей любимой IDE. Могу вас заверить, что вы знаете, как все, что работает внутри, может быть чрезвычайно полезным, и разница между программированием культового груза или просто изменением имени получателя, так что без IDE, Maven или ANT, au-naturel, давайте посмотрим, как запускать тесты jUnit из командной строки.
Требования
Как упоминалось ранее, мы собираемся сделать это без помощи Maven или IDE, поэтому нам понадобятся jUnit JAR и поместим их в путь к классам.
Сначала jUnit jar, вы можете скачать все, что вам нужно здесь:
- apiguardian-api-1.0.0.jar - https://repo1.maven.org/maven2/org/apiguardian/apiguardian-api/1.0.0/
- junit-jupiter-api-5.0.0.jar - https://repo1.maven.org/maven2/org/junit/jupiter/junit-jupiter-api/5.0.2/
- junit-platform-console-standalone-1.0.2.jar - https://repo1.maven.org/maven2/org/junit/platform/junit-platform-console-standalone/1.0. 2 /
Теперь, когда они у вас есть, пора создать проект.
Проект
Пришло время отказаться от старой моды и создать проект вручную, самостоятельно настроив папки и поместив все на свои места. Это просто, просто создайте папку lib, чтобы разместить все только что загруженные файлы jar-файлов.
Для других папок в проекте просто следуйте структуре, необходимой программам Java, где папки соответствуют структуре пакета, это тот, который используется в этом.
. ├── lib │ ├── apiguardian-api-1.0.0.jar │ ├── junit-jupiter-api-5.0.2.jar │ └── junit-platform-console-standalone-1.0.2.jar └── mx ├── calculo │ ├── Calculo.class │ └── Calculo.java └── calculoTest ├── CalculoTest.class └── CalculoTest.java
Вот исходные файлы Java Calculo.java и CalculoTest.java.
Компиляция проекта
Итак, как нам получить файлы .class? С командой javac, конечно, честно говоря, когда вы в последний раз ее использовали?
Теперь, прежде чем мы начнем компилировать некоторые детали, чтобы обратить внимание, поместите все файлы jar и java точно туда, где указано на диаграмме папок, иначе команды не будут работать и вызовите команды из корневого каталога этой диаграммы.
Для компиляции Calculo.java используйте
javac mx/calculo/Calculo.java
А для компиляции CalculoTest.java используйте
javac -cp lib/*:. mx/calculoTest/CalculoTest.java
Аргумент -cp lib / * :. должен указать компилятору включить папку lib в путь к классам и текущую папку (это то, что делает:.).
Запуск тестов
Итак, проект компилируется, но: «Работает ли он, как ожидалось?», Правильны ли расчеты? Итак, мы сделали наши модульные тесты, давайте запустим его и посмотрим, все ли работает так, как ожидалось, и если что-то не так, посмотрим, что пошло не так.
Для запуска тестов используйте следующую команду:
java -cp lib/*:. org.junit.platform.console.ConsoleLauncher -p mx
То, что мы делаем здесь, вызываем класс org.junit.platform.console.ConsoleLauncher, этот класс будет запускать все модульные тесты, содержащиеся в пакете, указанном параметром - p, после того, как все тесты будут запущены, вы увидите такой результат.
╷ ├─ JUnit Jupiter ✔ └─ JUnit Vintage ✔ └─ mx.calculoTest.CalculoTest ✔ ├─ pruebaJUnit ✔ ├─ pruebaCalculo ✔ └─ pruebaIVA ✘ expected: <1.6> but was: <140.0>Failures (1): JUnit Vintage:mx.calculoTest.CalculoTest:pruebaIVA MethodSource [className = 'mx.calculoTest.CalculoTest', methodName = 'pruebaIVA', methodParameterTypes = ''] => org.opentest4j.AssertionFailedError: expected: <1.6> but was: <140.0>Test run finished after 40 ms [ 3 containers found ] [ 0 containers skipped ] [ 3 containers started ] [ 0 containers aborted ] [ 3 containers successful ] [ 0 containers failed ] [ 3 tests found ] [ 0 tests skipped ] [ 3 tests started ] [ 0 tests aborted ] [ 2 tests successful ] [ 1 tests failed ]
Гораздо более визуальный эффект, чем ожидалось, не так ли? как вы можете видеть, все пройденные тесты обозначаются значком ✔, в то время как невыполненные тесты предоставят вам подробную информацию о том, что они не прошли, как только все тесты будут показаны, на экране отображается их сводка.
Также вы можете увидеть, как ConsoleLauncher запускал тесты, содержащиеся в подпакетах указанного нами, поэтому, если все ваши тесты содержатся в каком-то более крупном пакете, все будут запущены с одним параметром -p и даже в если ваши тесты проводятся в разных пакетах, вы можете использовать столько параметров -p, сколько вам нужно.
В качестве небольшой проблемы на основе выходных данных модульных тестов попытайтесь найти, что пошло не так, исправить это, перекомпилировать программу и повторно запустить модульный тест, чтобы вы могли увидеть, как выглядит полностью пройденный экран.
Если вы хотите скачать этот пример, вы можете найти его здесь:
Надеюсь, этот пост был полезен и до встречи в следующем :)
использованная литература
[1] Модульное тестирование с помощью JUnit - http://www.vogella.com/tutorials/JUnit/article.html
[2] Панель запуска консоли jUnit - http://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher-options