Сконфигурируйте NetBeans для выполнения одиночных модульных тестов с JMockit в качестве javaagent - PullRequest
0 голосов
/ 26 марта 2020

При использовании 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 

Особенно странно, что он работает со всем набором тестов, но не для отдельных тестов.

1 Ответ

0 голосов
/ 05 апреля 2020

Почему одиночный тест не пройден?

При выполнении clean and build NetBeans по умолчанию выполняет mvn clean install. Таким образом, maven выполняет цель org.apache.maven.plugins:maven-dependency-plugin:properties во время обычного жизненного цикла сборки, а плагин создает переменную ${org.jmockit:jmockit:jar}.

При выполнении одного тестового файла (т. Е. Project -> TestFile -> RightClick -> Test File (или Ctl + F6)) NetBeans выполняет только один цель mvn -Dtest=MyClass#someTest surefire:test. Таким образом, maven-dependency-plugin: properties не выполняется вообще, и maven не может найти переменную ${org.jmockit:jmockit:jar}, поскольку она не была создана.

Как ее решить?

Опция 1.

Go до Project -> Properties -> Actions и для действий Тестовый файл задает параметры для выполнения цели следующим образом:

test-compile org.apache.maven.plugins:maven-dependency-plugin:properties surefire:test

enter image description here

NetBeans создает файл nbactions. xml, поэтому решение будет работать только при выполнении отдельного теста из NetBeans.

Вариант 2.

Удалите maven-dependency-plugin из вашего pom. хт. Вместо этого укажите местоположение для jmockit.jar, используя ${settings.localRepository} property :

    ...
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <jmockit.version>1.43</jmockit.version>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <argLine>-javaagent:"${settings.localRepository}"/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar</argLine>
                </configuration>
            </plugin>
        </plugins>
    </build>
    ...

Option 3.

Я бы предположил, что цель свойств привязана к тест-компиляции фаза maven, но она будет работать только при отключении функции компиляции при сохранении в NetBeans.

...
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
    <execution>
     <phase>test-compile</phase>
        <goals>
            <goal>properties</goal>
        </goals>
    </execution>
</executions>
...
...