При использовании JMockit с Maven для модульных тестов необходимо передать местоположение jmockit.jar
в виртуальную машину, установив параметр -javaagent
. maven-dependency-plugin
может сделать это автоматически, я настроил конфигурацию, которая соответствует ожидаемому:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${dependency.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>properties</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>-javaagent:${org.jmockit:jmockit:jar}</argLine>
</configuration>
</plugin>
Это работает, когда набор тестов, а также отдельные тесты вызываются из командной строки, например, с помощью
mvn test -Dtest=MyClass#someTest
Из NetBeans также можно запустить весь набор тестов (например, при выполнении «Очистить и построить»). Но когда тестируется один файл, путь не вводится. При сбое виртуальной машины в журнале появляется команда, подобная следующей:
Command was /bin/sh -c cd /home/kap && /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre/bin/java '-javaagent:${org.jmockit:jmockit:jar}' -jar ...
, т. Е. Заполнитель не заполнен в правильном месте. Напротив, вызов в командной строке выдает
[DEBUG] Forking command line: /bin/sh -c cd /home/kap/ && /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre/bin/java -javaagent:/home/kap/.m2/repository/org/jmockit/jmockit/1.49/jmockit-1.49.jar
Особенно странно, что он работает со всем набором тестов, но не для отдельных тестов.