Как заставить тесты JUnit запускаться после создания JNI .so с плагином native-maven
У меня есть проект, который создает файл jni.so и файл java .jar. Все это работает, как и ожидалось, кроме выполнения теста JUnit. Мне нужно, чтобы тест JUnit запускался после того, как native-maven-plugin создает файл.so. Тест JUnit всегда будет неудачным при добавлении новых методов JNI, поскольку они выполняются до создания общей библиотеки. Единственный вариант построить дважды? Имеется в виду сборка после пропуска теста, а затем либо выполнить тесты отдельно, либо запустить сборку снова для выполнения теста?
2 ответа
Я полагаю, вы используете родную цель:link от native-maven-plugin?
если вы посмотрите на документацию цели, то увидите, что по умолчанию она привязана к пакету фазы жизненного цикла.
Тесты junit (запускаемые с помощью maven-surefire-plugin) по умолчанию запускаются в тесте фазы жизненного цикла (https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html).
в справочнике по жизненному циклу maven вы можете видеть, что фаза тестирования находится перед фазой пакета. это объясняет, почему ваши тесты не проходят после внесения изменений. Сначала выполняются тесты, затем создается файл.so.
Вы можете использовать maven-failsafe-plugin для запуска тестов после фазы пакета.
добавьте плагин в свою сборку и назовите все тесты, которые должны быть запущены после пакета, в MySpecificFeatureIT (суффикс IT означает Integration Test). Тесты с именем MyFeatureTest будут по-прежнему выполняться в фазе тестирования.
см. документацию по плагину для более подробной информации
Хорошо, это была проблема структуры проекта. Я пытался заставить тесты, которые принадлежали другому проекту, запускаться после того, как мой JNI.so был встроен в мой проект JNI. Мне нужно было поместить интеграционные тесты JNI, которые я создавал в src / java / test, в проект JNI, а не в другой проект, и попытаться как-то их упорядочить.
jni -
|
src
|
java
|
test
не
other project-
|
src
|
java
|
test
Конечно, Maven запустил другой тест проекта после того, как другой проект был построен. Это то, что он должен делать. Хотя проект JNI создал файл.so. Правило Java для тестирования все еще применяется к проекту JNI, когда дело доходит до выполнения тестов Java.