2012-11-19 4 views
5

Ich habe Ameise ein Glas mit dem folgenden Code ausführenPassing Java-Systemeigenschaften zu ant Tests

<target name="start.my.jar" description="start my jar"> 
    <echo message="Starting the jar" /> 
    <java jar="${jars.dir}/${my.stub.jar}" fork="true" dir="${jars.dir}" spawn="true"> 
      <sysproperty key="properties.filename" value="${basedir}/path/path/path/filename.properties"/> 
     <arg value="start" /> 
    </java> 
</target> 

in dem Topf gibt es eine Klasse mit dem folgenden Code

public static MyFacade createFacade() throws FileNotFoundException, IOException { 
    return createFacade(System.getProperty(properties.filename)); 
}  

und dann ist da noch eine Ameise Testziel, das wie folgt konfiguriert ist

<target name="test" depends="compile, support" description="perform unit tests"> 
    <mkdir dir="${build.test}" /> 
    <mkdir dir="${test-classes.dir}" /> 
    <javac srcdir="${build.test}" destdir="${test-classes.dir}" debug="${debug}" nowarn="${nowarn}" includeantruntime="false" deprecation="${deprecation}"> 
     <classpath refid="main.classpath" /> 
    </javac> 
    <junit printsummary="yes" haltonfailure="yes" showoutput="true" dir="${test-classes.dir}" fork="true" forkmode="perBatch" failureproperty="junit.failure" errorproperty="junit.error" haltonerror="no"> 
     <jvmarg value="-Xmx1G" /> 
     <jvmarg value="-Dcom.sun.management.jmxremote" /> 

     <classpath> 
      <pathelement location="${test-classes.dir}" /> 
      <pathelement location="${classes.dir}" /> 
      <!-- 
      For module restful_api 
      --> 
      <pathelement location="${build.deploy}" /> 
      <pathelement location="${classes.dir}" /> 
      <fileset dir="${build.lib}"> 
       <include name="*.jar" /> 
      </fileset> 
     </classpath> 
     <formatter type="plain" /> 
     <batchtest fork="yes" todir="${build.test}"> 
      <fileset dir="${build.test}"> 
       <include name="**/*AllTests.java" /> 
       <include name="**/*TestCase.java" /> 
      </fileset> 
     </batchtest> 
    </junit> 
    <fail message="Unittest failures - please check" if="junit.failure" /> 
    <fail message="Unittest errors - please check" if="junit.error" /> 
</target> 

Meine Tests in diesem Testzielmodul können die Eigenschaft nicht abrufen für die Datei, die ich auf dem start.my.jar-Ziel angegeben habe. Gibt es irgendetwas, was ich falsch mache?

SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container 
[junit] java.lang.NullPointerException 
[junit]  at java.io.File.<init>(File.java:222) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.getInputStream(MyFacadeFactory.java:47) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.loadFacade(MyFacadeFactory.java:43) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.createFacade(MyFacadeFactory.java:32) 
[junit]  at com.mycompany.myproduct.sdk.facade.MyFacadeFactory.createFacade(MyFacadeFactory.java:28) 
[junit]  at com.mycompany.myproduct.sdk.resources.impl.TransactionResourceImpl.<init>(TransactionResourceImpl.java:70) 
[junit]  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
[junit]  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
[junit]  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
[junit]  at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
[junit]  at com.sun.jersey.server.spi.component.ResourceComponentConstructor._construct(ResourceComponentConstructor.java:191) 
+1

versuchen zurückzukehren createFacade (System.getProperty ("properties.filename")); – user1097489

+0

Ich habe einen Fehler gemacht, es ist tatsächlich properties.filename aber immer noch nicht funktioniert – ThaSaleni

+0

könnten Sie den Stacktrace buchen? – user1097489

Antwort

1

Lustig genug, um dies gearbeitet:

<jvmarg value="- Dproperties.filename=${basedir}/path/path/path/filename.properties"/> 

diejenige, die ich vorher benutzt:

<sysproperty key="" value=""/> 

nie gearbeitet

4

Das ist, weil Sie die Eigenschaft nur für das java Ziel hinzufügen, die eine unabhängige Laufzeitumgebung ist. Das Ziel junit gibt eine neue Umgebung an (wenn Sie einige JVM-Switches dafür festlegen, müssen Sie auch die Systemeigenschaften angeben).

Versuchen Sie folgendes:

<junit ...> 
    <sysproperty key="properties.filename" 
      value="${basedir}/path/path/path/filename.properties"/> 
    .... 
</junit> 

Eine weitere Alternative ist es, die Ant-Task mit dem -Dproperties.filename=... Schlüssel jedes Mal ausgeführt werden (Sie, dass in den externen Laufe Konfigurationen in Eclipse einstellen). Der Nachteil ist jedoch, dass Sie sich jedes Mal daran erinnern müssen, wenn Sie die Aufgabe ausführen möchten (z. B. in einem CI-Build oder mit einem neuen Checkout).

+0

Ich habe das getan, immer noch einen Null-Zeiger bekommen ... vielleicht sollte ich auch die Stack-Trace – ThaSaleni

+0

posten Ich muss die Eigenschaft als eine Config an die Build-Datei übergeben, weil ich es total automatisch für CI Build – ThaSaleni

+0

Lustig genug brauche das hat funktioniert der, den ich vor ' verwendet habe hat nie funktioniert – ThaSaleni