开发者

How do I load a properties file with JUnit / Ant?

I'm using Ant 1.8, JUnit 4.8.2. I'm trying to load a properties file and having some problems. The properties file is at the root of my source directory and I load that into the classpath as well as explicitly loading the properties file in the classpath. Below is my ant build.xml file. Here is how I'm trying to load the properties …

private void loadTestProperties() { 
    try { 
        Properties prop = new Properties();
        InputStream in = getClass().getResourceAsStream("db.properties");
        prop.load(in);
        in.close();
    } catch (Exception e) { 
        fail("Failed to load properties: " + e.getMessage());
    }   // try
}   // loadTestProperties

It always fails with null (properties were not loaded).

<project name="leads-testing" default="build" basedir=".">
  <property name="tst-dir" location="/Users/davea/Documents/workspace-sts-2.6.0.SR1/infinitiusa_leads_testing/test" />
  <property name="db-props-file" location="/Users/davea/Documents/workspace-sts-2.6.0.SR1/infinitiusa_leads_testing/test/db.properties" />
  <property name="开发者_开发技巧TALK" value="true" />

  <path id="classpath.base">
  </path>
  <path id="classpath.test">
    <pathelement location="lib/junit-4.8.2.jar" />
    <pathelement location="lib/selenium-java-client-driver.jar" />
    <pathelement location="lib/classes12.jar" />
    <pathelement location="${tst-dir}" />
    <pathelement location="${db-props-file}" />
    <path refid="classpath.base" />
  </path>

  <target name="compile-test">
    <javac srcdir="${tst-dir}"
           verbose="${TALK}"
           >
      <classpath refid="classpath.test"/>
    </javac>
  </target>
  <target name="clean-compile-test">
    <delete verbose="${TALK}">
      <fileset dir="${tst-dir}" includes="**/*.class" />
    </delete>
  </target>

  <target name="test" depends="compile-test">
    <junit>
      <classpath refid="classpath.test" />
      <formatter type="brief" usefile="false" />
      <test name="com.criticalmass.infinitiusa.tests.InfinitiConfigOldG25Base" />
    </junit>
  </target>

  <target name="all" depends="test" />
  <target name="clean" depends="clean-compile-test" />
</project>

Anyone know the correct way to load the properties file? Thanks, - Dave


Attempting to load a resource from getClass().getResourceAsStream() will cause db.properties to be looked for based on the package name of the class, i.e. in a directory (in the classpath) like com/criticalmass/infinitiusa/....

Instead, to load from the root of the classpath, try something like

InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");


InputStream in = getClass().getResourceAsStream("db.properties");

Try "/db.properties" instead. See Class.getResourceAsStream()

For Ant, file paths are resolved relative to the working directory. So if running from the project root, the file would be in src/${db-props-file}.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜