Файл не найден Если тестовый запуск выполняется с помощью скрипта - PullRequest
0 голосов
/ 10 сентября 2018

Я запускаю свой тест из тестовых файлов java junit. Получается файл из тестовой папки моего проекта. как ABCTest это мой проект. внутри этого проекта у меня есть папка test / testfiles , и там есть какой-то файл .xlsx. Когда я запускаю свой тестовый код из класса java из eclipse, например Run As-> Junit test , он может читать файл из этой папки.

fileNameWithPath="test/testfiles/abc.xlsx"          
out = new ByteArrayOutputStream();
            fis = new FileInputStream(fileNameWithPath);
            bis = new BufferedInputStream(fis);

            while ((c = bis.read()) != -1) {
                out.write(c);
            }

            fileData = out.toByteArray();

Но для того же самого кода. Если я собираюсь запустить тестовый файл Java из скрипта ant, он получит ошибку

<target name="prepare" depends="resolve">
        <mkdir dir="${build.dir}" />
        <mkdir dir="${build.test.classes.dir}" />
        <mkdir dir="${build.test.reports.dir}" />

        <path id="test.cp">
            <fileset dir="${lib.test.dir}">
                <include name="junit-4.8.2.jar" />
                <include name="dozer-*.jar" />
            </fileset>
            <fileset dir="${lib.dir}">
                <include name="*.jar" />
            </fileset>
            <fileset dir="${lib.apache.dir}">
                <include name="*.jar" />
            </fileset>
        </path>
    </target>

    <target name="tests.compile" depends="prepare">
        <javac destdir="${build.test.classes.dir}" excludes="/backend/security/**/*.*" debug="true" optimize="true" deprecation="false" failonerror="true">
            <src path="${src.test.dir}" />
            <src path="${src.dir}" />

            <classpath>
                <path refid="test.cp" />
            </classpath>
        </javac>
        <copy file="test/src/dozer.properties" todir="${build.test.classes.dir}" />
        <copy file="test/src/test.log4j.properties" todir="${build.test.classes.dir}" />
        <copy todir="${build.test.classes.dir}/testApplicationContexts">
            <fileset dir="${src.test.dir}/testApplicationContexts" />
        </copy>


        <copy todir="${build.test.classes.dir}/test/testfiles">
                <fileset dir="${basedir}/test/testfiles" />
        </copy>
    </target>

    <target name="tests.run" depends="tests.compile">
        <junit fork="yes" forkmode="once" haltonfailure="no" showoutput="no" printsummary="yes" maxmemory="256m">
            <jvmarg value="-Dlog4j.configuration=test.log4j.properties"/>

            <formatter type="xml" />
            <classpath>
                <pathelement location="${build.test.classes.dir}" />
                <path refid="test.cp" />
            </classpath>
            <batchtest todir="${build.test.reports.dir}">
                <fileset dir="${src.test.dir}">
                     <include name="**/FileReadTest.java" /> 
                </fileset>
            </batchtest>
        </junit>

У меня нет фактической причины для этого.

Примечание: я использую пружинный MVC. и тест Junit для этого. Проект построен с муравьем.

Исключение, подобное этому

java.io.FileNotFoundException: test\testfiles\abc.xlsx (The system cannot find the path specified)

1 Ответ

0 голосов
/ 10 сентября 2018

Таким образом, когда вы смотрите на полученное исключение, вы видите, что файл по пути test\testfiles\abc.xlsx не может быть найден. Это довольно логично, потому что не указывает полный путь. Например, вы можете попробовать скопировать путь и вставить его в проводник. Решением для этого является получение файла из вашего рабочего каталога. Вы можете сделать это с помощью кода в приведенном ниже примере:

File file = System.getProperty("user.dir")) + File.separator "test" + File.separator + "testfiles" + File.separator + "abc.xslx";

Но лучшим решением было бы использование каталогов ресурсов вашего проекта. Файл должен находиться в каталоге ресурсов тестирования и в главном каталоге ресурсов, чтобы это работало. Если бы вы сделали это, вы могли бы использовать:

YourClassName.class.getResource("path/within/resource/directory")

Примечание: Я использую File.separator, так что он будет отлично работать на Windows, как операционные системы Linux. Вы можете прочитать больше об этом здесь

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