Тест Junit не может получить доступ к файловой системе с помощью LocalServiceTestHelper

Я пытаюсь получить доступ к статическому файлу в каталоге /WEB-INF/ в проекте Google App Engine.

Следующий код отлично работает при запуске сервера разработки, но не работает в модульном тесте.

String name = "WEB-INF/myfiles/myfile.dat";
File file = new File( name );
FileInputStream fis = new FileInputStream( file );

Однако тот же код в тесте JUnit вызывает исключение FileNotFoundException.

Что бы это ни стоило, я настроил LocalServiceTestHelper, чтобы все тестовые случаи хранилища данных работали нормально.

Выполняется ли модульное тестирование с другим рабочим каталогом, и если да, то как я могу установить/исправить это?


person Capn Sparrow    schedule 11.03.2016    source источник
comment
FileNotFoundException довольно объяснимо. Ваш путь к файлу должен быть скорректирован, чтобы тестовый класс мог найти фактический файл.   -  person Sandy Simonton    schedule 11.03.2016
comment
В неразорвавшейся войне нет фактического файла.   -  person chrylis -cautiouslyoptimistic-    schedule 11.03.2016
comment
@SandySimonton Дело в том, что я не могу настроить путь, так как GAE не найдет его, поэтому я задаюсь вопросом, как настроить среду выполнения junit для зеркалирования GAE   -  person Capn Sparrow    schedule 11.03.2016


Ответы (1)


Я не думаю, что это связано с LocalTestServiceHelper (который настраивает локальную реализацию сервисов AE). В «текущей папке», в которой вы запускаете тест, нет папки «WEB-INF» [изначально или скопированной]).

Я не уверен, как вы запускаете свои модульные тесты. Некоторые IDE будут копировать неисходные папки в «целевую» папку, и в некоторых случаях вы можете настроить свой сценарий запуска (ant build.xml, maven pom.xml,...) для выполнения такого копирования за вас.

Однако, хотя это выполнимо, поскольку это модульный тест, вы можете рассмотреть возможность изоляции части загрузки исходного кода (которую вы можете установить по-разному для тестов и производства) в общую логику, обрабатывающую исходный код, который вы тестируете.

Другой вариант — имитировать источник ввода (например, чтение через ServletContext.getInputStream и имитацию ServletContext для возврата содержимого).

person ozarov    schedule 12.03.2016
comment
Для тех, кто возвращается к этому, решение действительно было в конфигурации запуска Eclipse - нужно было изменить каталог. - person Capn Sparrow; 04.09.2018