2013-08-23 7 views
5

Mam projekt Java w środowisku Eclipse, z testami JUnit w moim katalogu src/test. Dodałem także do testów testy mikrokomputerów Caliper i chciałbym móc uruchomić te testy z poziomu Eclipse.Bieganie zacisku od zaćmienia w zakresie testowym maven's

Ponieważ kod Caliper jest kodem testowym, dodałem Caliper jako zależność w Maven w zakresie test. To sprawia, że ​​pojawia się w ścieżce klas po uruchomieniu testów JUnit, ale nie widzę sposobu uruchomienia dowolnej klasy z zależnościami testowymi w ścieżce klas. Próbowałem jedynie dodać nową konfigurację uruchamiania dla aplikacji Java, myśląc, że mogę uruchomić CaliperMain z odpowiednią klasą jako parametrem, ale jar zacisku nie znajduje się w ścieżce klasy i nie widzę sposobu dodania go.

Nie chcę przenosić kodu testu wydajności i zależności do zakresu main, ponieważ jest to kod testowy! Wydaje się, że to poważna przesada, aby przenieść go do całkowicie odrębnego projektu.

+0

Konfiguracja środowiska Eclipse po prostu wyświetla "Zależności Mavena" dla mojej ścieżki klas. Nie wydaje się, aby oddzielić zależności testowe od niebadawczych. Czy sprawdziłeś, że Caliper jest rzeczywiście włączony? – gk5885

+0

@ gk5885, jest dostępny w Eksploratorze pakietów, dostępnym w ścieżce klasy podczas uruchamiania konfiguracji typu "JUnit", ale niedostępnej w ścieżce klasy podczas uruchamiania konfiguracji typu "Aplikacja Java". –

+0

Nie jestem pewien, czy w pełni rozumiem Twój scenariusz, szczególnie "uruchom dowolną klasę z zależnościami testowymi w ścieżce klas". Nie możesz po prostu stworzyć i uruchomić testu JUnit, który zrobiłby dokładnie to, co CaliperMain normalnie zrobiłby w swojej głównej metodzie? – Morfic

Odpowiedz

5

Powinieneś być w stanie to zrobić z Maven Exec Plugin. Do mojego projektu wybrałem profil testowy, który można uruchomić za pomocą komendy maven: mvn compile -P benchmarks.

Aby skonfigurować coś takiego, można dodać coś wzdłuż linii następujących do pom.xml, określając zakres ścieżce klasy jako testowym pomocą <classpathScope> tag:

<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> 

Ewentualnie, jeśli” chciałbym, aby określić wiele opcji dla zacisku, to chyba łatwiej użyć <arguments> tagi:

<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> 

więcej opcji konfiguracyjnych (Li ke -Cinstrument.allocation.options.trackAllocations powyżej) można znaleźć here i więcej opcji środowiska wykonawczego (takich jak --instrument powyżej) można znaleźć here.

Następnie, jeśli używasz wtyczki Eclipse m2 Maven, można kliknąć prawym przyciskiem myszy na folderze projektu i wybierz Run as... -> Maven Build... i wprowadzić coś takiego clean install w polu Goals wejściowego i benchmarks w polu Profiles wejściowego i kliknij Run i cię powinien zobaczyć dane wyjściowe w konsoli Eclipse.

Ważne jest, aby pamiętać, że użyłem lokalnej wersji migawkowej Suwmiarki, sprawdzając źródło, używając git clone https://code.google.com/p/caliper/, co jest zalecane w czasie tego posta, aby móc skorzystać z najnowszego interfejsu API.

+0

Daje mi to błąd: '' '[stderr] CICompilerCount z 1 jest nieprawidłowy; musi być co najmniej 2 [stderr] Błąd: Nie można utworzyć wirtualnej maszyny Java. [stderr] Error: Wystąpił krytyczny wyjątek. Program wyjdzie. '' ' Czy mógłbyś podać mi wskaźnik, jak to naprawić, tj. Jak przekazać potrzebny argument do JVM? – panmari

Powiązane problemy