#java #exception #junit
#java #исключение #junit
Вопрос:
Приготовьтесь, новичок Java здесь. Я написал метод, который считывает файл в список целых массивов.
public static ArrayList<Integer> numArray(String numIn) throws FileNotFoundException{
try{
FileReader file = new FileReader(numIn);
Scanner sc = new Scanner(file);
while(sc.hasNext())
{
statusCodes.add(sc.nextInt());
}
sc.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return statusCodes;
}
Он отлично работает, когда я запускаю его в основном методе его собственного класса, но когда я пытаюсь запустить для него тестовый пример JUnit, он выдает мне FileNotFoundException.
static ArrayList<Integer> newCodes = numArray("src/statCodes.txt");
Кто-нибудь знает, как избавиться от этого исключения?
Ответ №1:
Нет необходимости объявлять throws FileNotFoundException
, поскольку вы перехватываете Exception
, который будет перехватывать все исключения, включая захваченное и некэшированное исключение (во время выполнения).
Вы получаете FileNotFoundException
, потому что файл не найден по указанному вами пути. Может быть, попробовать использовать абсолютный путь? Проверьте, какова корневая папка вашего проекта, и укажите соответствующий путь. Также это будет зависеть от того, откуда вы запускаете свои случаи junit.
Ответ №2:
Это потому, что ваш метод объявляет (неправильное) выбрасывание FileNotFoundException, которое перехватывается само по себе.
Ответ №3:
Это потому, что он не может найти ваш файл из каталога. Хороший способ сделать это YourTestClass.class.getResourceAsStream(filename)
, это вернет входной поток. Также, как все говорили, либо удалите предложение catch, либо throws .
Ответ №4:
Несмотря на то, что во всех ответах говорится, что вам не нужно создавать исключение, если вы его поймаете, причина, по которой вы, вероятно, получаете FileNotFoundException
при запуске тестов с использованием JUnit, заключается в том, что ваши тестовые классы, скорее всего, находятся в другом каталоге, и ваш путь к файлу в этой ситуации недействителен. Попробуйте проверить значение numIn
относительно ваших тестовых классов и посмотреть, работает ли для вас использование абсолютного пути или какого-либо другого решения.
Ответ №5:
Ваш оператор catch улавливает ВСЕ исключения и не создает их повторно, поэтому этому методу не нужен оператор throw . Также, если у вас есть метод, который выдает исключение при каждом вызове этого метода, вы должны обработать исключение, которое он выдает.
Также вы запускаете тесты JUnit внутри того же пакета? Я не могу себе представить, что вы бы этого не сделали, но, по крайней мере, в eclipse он ищет файл в локальном каталоге, который одинаков для JUnit и основного класса.
Ответ №6:
Возможно, вы забыли добавить еще одно «throws FileNotFoundException» к основному методу вашего тестового примера.