2009-01-21 18 views
11

Moja kompilacja Ant zawiera zło, które uruchamia niektóre testy. Aby testy działały, należy zmienić wartość właściwości, która określa bieżący katalog roboczy (user.dir), ale nie jestem pewien, jak to osiągnąć.Jak ustawić katalog roboczy zadania "junit" Ant?

postawionego zadania aktualnie wygląda tak:

<junit printsummary="withOutAndErr" fork="true" 
      haltonfailure="yes" showoutput="true" 
      filtertrace="false" dir="C:/workspace/obp-web"> 
    <jvmarg value="-Duser.dir=C:/workspace/obp-web"/> 

    <classpath> 
     <fileset dir="${web.lib.dir}" includes="**/*.jar"/> 
     <fileset dir="${lib.dir}" includes="**/*.jar"/> 
    </classpath>  
    <batchtest fork="no" todir="${web.build.dir}/testresults"> 
     <formatter type="xml"/> 
     <zipfileset src="${web.build.dir}/test-obp-web.jar"> 
      <include name="**/*Test.class"/> 
     </zipfileset>   
    </batchtest> 
</junit> 

Zauważ, że starałem się używać zarówno atrybut „dir” i „jvmarg” zadanie, aby zmienić katalog roboczy na C:/roboczy/obp-web. Jednakże gdy uruchomię Ant z wyjściem gadatliwy włączona, widzę następujące wyjścia, co oznacza, że ​​reż pracy nie został prawidłowo ustawiony:

[junit] dir atrybut ignorowane, jeśli działa w tym samym VM

[JUnit] Użycie właściwości systemowe {java.runtime.name = Java (TM) SE wykonawcza Środowisko, sun.boot.library.path = c: \ JDK6 \ jre \ bin java.vm .version = 10.0-b23, ant.lib rary.dir = C: \ java \ apache-ant-1.7.0 \ lib, java.vm.vendor = Sun Microsystems Inc. java.vendor.url = http://java.sun.com/, path.separator = ;, java.vm.name = Java Internetu (TM) Klient VM file.encoding.pkg = sun.io, user.country = CA, sun.java.launcher = SUN_STANDARD, sun.os.patch.level = Service pack 1, java.vm.specification.name = Java Virtual Machine Specification, użytkownik .dir = c: \ workspace \ obp-ear, java.runtime.version = 1.6.0_07-b06, java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment, java.endorse d.dirs = c: \ jdk6 \ jre \ lib \ endorsed, os.arch = x86, java.io.tmpdir = C: \ Users \ Donal \ AppData \ Local \ Temp \, line.separator =

Odpowiedz

7

Spróbuj użyć jvmarg:

<junit fork="yes"> 
    <jvmarg value="-Duser.dir=somedir"/> 
    ... 
</junit> 

Zauważ, że widelec koniecznością być prawdziwe zarówno na junit znacznikiem i batchtest tagu jako tagu batchtest nadpisuje wartości od JUnit. Jvmargs działa tylko wtedy, gdy junit wyświetla nową maszynę JVM.

+1

Próbowałem, ale bez powodzenia. Zaktualizowałem oryginalny przedmiot o informacje. –

+0

Nie można zmienić bieżącego katalogu roboczego w Javie, ustawiając parametr user.dir. Zmiana tej właściwości systemowej jest uznawana za błąd użytkownika. –

+1

@David To prawda, ale instruujemy junit, aby rozwinęło nową maszynę JVM z tą właściwością user.dir, nie modyfikując właściwości w działającej JVM – Kevin

13

Użyj atrybutu "dir" (musi bulić VM):

http://ant.apache.org/manual/Tasks/junit.html

+0

Próbowałem, ale bez powodzenia. Zaktualizowałem oryginalny przedmiot o informacje. –

+0

To zadziałało dla mnie. –

+3

To działało również dla mnie. Nie zapomnij o fork = "yes". – thSoft

0

Czy próbowałeś lokalizację pathelement? To działało dla mnie.

<classpath> 
<!-- filesets, etc. --> 
<pathelement location="C:/workspace/obp-web" /> 
    </classpath> 
0

Ten sam problem co Ty.

postanowiłem go poprzez widełki batchtest true:

batchtest widelec = "nr "..

do

batchtest widelec =" tak" ..