2013-08-23 1 views
5

У меня есть проект Java в Eclipse, с тестами JUnit в моем каталоге src/test. Я также добавил класс к моим тестам с микрочипами Caliper, и я хотел бы иметь возможность запускать эти тесты из Eclipse.Запуск суппорта от затмения в области тестирования maven

Поскольку код суппорта - это тестовый код, я добавил суппорт как зависимость в Maven в области test. Это заставляет его отображаться в пути к классам, когда я запускаю тесты JUnit, но я не вижу способа запуска произвольного класса с тестовыми зависимостями в пути к классам. То, что я пытался сделать, это добавить новую конфигурацию запуска для Java-приложения, думая, что я могу запустить CaliperMain с правильным классом в качестве параметра, но барабанчик не находится в пути к классам, и я не вижу, как его добавить.

Я не хочу переводить свой контрольный код и зависимость в область main, так как это тестовый код! Кажется, серьезно переборщить, чтобы переместить его в совершенно отдельный проект.

+0

Конфигурация запуска Eclipse просто перечисляет «Зависимости Maven» для моего пути к классам. Кажется, он не разделяет тестовые и нетестовые зависимости. Вы подтвердили, что в настоящее время включен суппорт? – gk5885

+0

@ gk5885, он доступен в Проводнике пакетов, доступный в пути класса при запуске конфигурации типа «JUnit», но недоступный в пути класса при запуске конфигурации типа «Java Application». –

+0

Я не уверен, что полностью понимаю ваш сценарий, особенно «запустил произвольный класс с тестовыми зависимостями в пути к классам». Разве вы не можете просто создать и запустить JUnit-тест, который бы точно делал бы то, что обычно выполнял бы CaliperMain в своем основном методе? – Morfic

ответ

5

Вы должны быть в состоянии сделать это с помощью Maven Exec Plugin. Для моего проекта я решил создать контрольный профиль, который можно запустить с помощью команды maven mvn compile -P benchmarks.

Чтобы настроить что-то вроде этого, вы можете добавить что-то вдоль линий следующего к pom.xml, указав сферу пути к классам тест с помощью <classpathScope> тега:

<profiles> 
    <profile> 
     <id>benchmarks</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.2.1</version> 
        <executions> 
         <execution> 
          <id>caliper</id> 
          <phase>compile</phase> 
          <goals> 
           <goal>java</goal> 
          </goals> 
          <configuration> 
           <classpathScope>test</classpathScope> 
           <mainClass>com.google.caliper.runner.CaliperMain</mainClass> 
           <commandlineArgs>com.stackoverflow.BencharkClass,com.stackoverflow.AnotherBenchmark</commandlineArgs> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

В качестве альтернативы, если вы» хотел бы задать много вариантов для суппорта, это, вероятно, проще использовать <arguments> теги:

<executions> 
    <execution> 
     <id>caliper</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>java</goal> 
     </goals> 
     <configuration> 
      <classpathScope>test</classpathScope> 
      <mainClass>com.google.caliper.runner.CaliperMain</mainClass> 
      <arguments> 
       <argument>com.stackoverflow.BencharkClass</argument> 
       <argument>--instrument</argument> 
       <argument>runtime</argument> 
       <argument>-Cinstrument.allocation.options.trackAllocations=false</argument> 
      </arguments> 
     </configuration> 
    </execution> 
</executions> 

Дополнительные параметры конфигурации (литий ke -Cinstrument.allocation.options.trackAllocations) можно найти here и больше вариантов исполнения (например, --instrument выше) можно найти here.

Затем, если вы используете плагин Eclipse, м2 Maven, вы можете щелкнуть правой кнопкой мыши на папку проекта и выберите Run as... -> Maven Build... и ввести что-то вроде clean install в Goals поле ввода и benchmarks в Profiles поле ввода и нажмите Run и вас должен увидеть результат в консоли Eclipse.

Важно отметить, что я использовал локальную сборку снимков Caliper, проверив источник с помощью git clone https://code.google.com/p/caliper/, который рекомендуется на момент публикации, чтобы воспользоваться новейшим API.

+0

Это дает мне ошибку: '' '[stderr] CICompilerCount из 1 недействителен; должно быть не менее 2 [stderr] Ошибка: не удалось создать виртуальную машину Java. Ошибка [stderr]: произошло фатальное исключение. Программа выйдет. '' ' Не могли бы вы дать мне указатель, как это исправить, то есть как передать необходимый аргумент JVM? – panmari