Су, вы уже смотрите все выступления дяди Боба Мартина на Youtube, читаете одно или два руководства по jUnit и хотите дать тестовой разработке (TDD) шанс (Не пытайтесь, иначе Йода и мистер Мияги расстроятся, если вы просто « попробуйте »), возможно, вы захотите оставить всю работу по настройке Maven или вашей любимой IDE. Могу вас заверить, что вы знаете, как все, что работает внутри, может быть чрезвычайно полезным, и разница между программированием культового груза или просто изменением имени получателя, так что без IDE, Maven или ANT, au-naturel, давайте посмотрим, как запускать тесты jUnit из командной строки.

Требования

Как упоминалось ранее, мы собираемся сделать это без помощи Maven или IDE, поэтому нам понадобятся jUnit JAR и поместим их в путь к классам.

Сначала jUnit jar, вы можете скачать все, что вам нужно здесь:

Теперь, когда они у вас есть, пора создать проект.

Проект

Пришло время отказаться от старой моды и создать проект вручную, самостоятельно настроив папки и поместив все на свои места. Это просто, просто создайте папку 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