Тестирование Surefire JUnit с использованием собственных библиотек

Мы используем Maven в Hudson для запуска нашего процесса сборки Java и плагин Surefire для выполнения тестов JUnit, однако я столкнулся с проблемой модульных тестов для одного проекта, для которого требуются собственные библиотеки DLL.

Ошибка, которую мы видим:

Тесты с ошибкой: TestFormRegistrationServiceConnection(com.#productidentifierremoved#.test.RegistrationServiceTest): нет аутентификатора в java.library.path

Где Authenticator — это имя требуемой dll. Я нашел этот SO post что предполагает, что единственный способ установить это через argLine. Мы изменили наш конфиг на это:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>2.10</version>
        <configuration>
            <forkMode>once</forkMode>
            <argLine>-Djava.library.path=${basedir}\src\main\native\Authenticator\Release</argLine>
        </configuration>
    </plugin>

Однако это по-прежнему дает ту же ошибку, и если мы включим System.out.println(System.getProperty("java.library.path")); мы видим, что это не добавляется к пути.

Любые идеи, как мы можем это решить?


person Andy March    schedule 19.04.2012    source источник


Ответы (1)


Чтобы добавить системное свойство в тесты JUnit, настройте Maven Подключаемый модуль Surefire следующим образом:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <systemPropertyVariables>
          <java.library.path>${project.basedir}/src/main/native/Authenticator/Release</java.library.path>
        </systemPropertyVariables>
      </configuration>
    </plugin>
  </plugins>
</build>

Обновлять:

Хорошо, кажется, это свойство должно быть установлено до запуска JVM с тестами JUnit. Так что я предполагаю, что у вас проблемы с обратной косой чертой. Обратная косая черта в значении свойства Java используется для экранирования специальных символов, таких как \t (табулятор) или \r\n (новая строка Windows). Поэтому попробуйте использовать это вместо вашего решения:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <forkMode>once</forkMode>
        <argLine>-Djava.library.path=${project.basedir}/src/main/native/Authenticator/Release</argLine>
      </configuration>
    </plugin>
  </plugins>
</build>
person Jiri Patera    schedule 19.04.2012