«Необработанное исключение типа FileNotFoundException» в JUnit, несмотря на то, что оно выбрасывается в обычный класс?

#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» к основному методу вашего тестового примера.