Загрузка файла свойств в JUnit @BeforeClass - PullRequest
10 голосов
/ 03 апреля 2012

Я пытаюсь загрузить sample.properties из моего classpath во время выполнения теста JUnit, и он не может найти файл в пути к классам.Если я напишу основной класс Java, я смогу загрузить файл просто отлично.Я использую приведенную ниже задачу для выполнения JUnit.

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>

Выход:

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

Ответы [ 2 ]

10 голосов
/ 03 апреля 2012

Вам нужно добавить ${build.classes.dir} к compile.classpath.

Обновление : Судя по сообщениям в комментариях, оказалось, что classpath не является проблемой. Вместо этого использовался неправильный загрузчик классов.

Class.getResourceAsStream() ищет путь к ресурсу на основе загрузчика классов, которым был загружен класс. Оказывается, класс Properties был загружен загрузчиком классов, отличным от класса Testing, и путь к ресурсу был неверным по отношению к classpath загрузчика этого класса. Решением было использовать Testing.class.getResourceAsStream(...) вместо Properties.class.getResourceAsStream(...).

0 голосов
/ 25 февраля 2019

Это работает:

YourTestClass.class.getClassLoader().getResourceAsStream

Это не работает :

YourTestClass.class.getResourceAsStream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...