2012-04-02 40 views
9

Estoy intentando cargar sample.properties desde mi classpath durante la ejecución de mi prueba JUnit y no puedo encontrar el archivo en la ruta de la clase. Si escribo una clase Java Main, puedo cargar el archivo muy bien. Estoy usando la tarea siguiente para ejecutar mi JUnit.Cargando archivo de propiedades En JUnit @BeforeClass

public class Testing { 
@BeforeClass 
    public static void setUpBeforeClass() throws Exception { 
     Properties props = new Properties(); 
     InputStream fileIn = props_.getClass().getResourceAsStream("/sample.properties"); 
     **props.load(fileIn);** 
    } 

} 

JUnit:

<path id="compile.classpath"> 
     <pathelement location="${build.classes.dir}"/> 
    </path> 
    <target name="test" depends="compile"> 
      <junit haltonfailure="true"> 
       <classpath refid="compile.classpath"/> 
       <formatter type="plain" usefile="false"/> 
       <test name="${test.suite}"/> 
      </junit> 
     </target> 
     <target name="compile"> 
      <javac srcdir="${src.dir}" 
        includeantruntime="false" 
        destdir="${build.classes.dir}" debug="true" debuglevel="lines,vars,source"> 
       <classpath refid="compile.classpath"/> 
      </javac> 
      <copy todir="${build.classes.dir}"> 
       <fileset dir="${src.dir}/resources" 
         includes="**/*.sql,**/*.properties" /> 
      </copy> 
     </target> 

Salida:

[junit] Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 0.104 sec 
[junit] 
[junit] Testcase: com.example.tests.Testing took 0 sec 
[junit]  Caused an ERROR 
[junit] null 
[junit] java.lang.NullPointerException 
[junit]  at java.util.Properties$LineReader.readLine(Properties.java:418) 
[junit]  at java.util.Properties.load0(Properties.java:337) 
[junit]  at java.util.Properties.load(Properties.java:325) 
[junit]  at com.example.tests.Testing.setUpBeforeClass(Testing.java:48) 
[junit] 

Respuesta

9

es necesario agregar a ${build.classes.dir}compile.classpath.

Actualización: De acuerdo con la comunicación en los comentarios, resultó que el classpath no era el problema. En cambio, se utilizó el cargador de clases incorrecto.

Class.getReasourceAsStream() busca la ruta del recurso según el cargador de clases cargado por la clase. Como resulta que la clase Properties fue cargada por un classloader diferente de la clase Testing, y la ruta del recurso era incorrecta en relación con classpath de ese classpath. La solución fue usar Testing.class.getReasourceAsStream(...) en lugar de Properties.class.getResourceAsStream(...).

+0

gracias por la respuesta. Agregué el compile.classpath que incluía el $ {build.classes.dir} que se resuelve construir/classes dir arriba dado que ya era como lo que sugeriste, por lo que desafortunadamente no es mi problema. – c12

+0

La única otra vez que esto puede suceder (AFAIK) es cuando intenta cargar el recurso de una clase que fue cargada por un cargador de clases diferente que su propia clase. Pruebe 'getClass(). GetReasourceAsStream (...)' en lugar de 'prop.getClass(). GetResourceAsStream (...)'. Avíseme si esto soluciona su problema y actualizaré la respuesta – Attila

+0

InputStream es = Testing.class.getClassLoader(). GetResourceAsStream ("sample.properties"); trabajado, gracias por la sugerencia. – c12

Cuestiones relacionadas