JUnit中的“未处理的异常类型FileNotFoundException”,尽管它在普通类中抛出?

时间:2014-06-19 17:22:40

标签: java exception 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;
    }

当我在它自己的类的main方法中运行它时工作正常,但是当我尝试为它运行JUnit测试用例时,它给了我一个FileNotFoundException。

static ArrayList<Integer> newCodes = numArray("src/statCodes.txt");

有人知道如何摆脱这种异常吗?

6 个答案:

答案 0 :(得分:1)

当您捕获throws FileNotFoundException时,无需声明Exception,这将捕获所有异常,包括catched和untcached(Runtime)异常。

您将获得FileNotFoundException,因为在您指定的路径中找不到文件。也许尝试使用绝对路径?检查项目的根文件夹是什么,并相应地提供路径。它还取决于你在哪里运行你的junit案例。

答案 1 :(得分:1)

那是因为你的方法声明了(错误的)抛出FileNotFoundException,它本身就被捕获了。

答案 2 :(得分:0)

这是因为它无法从目录中找到您的文件。执行此操作的好方法YourTestClass.class.getResourceAsStream(filename),这将返回一个InputStream。也正如大家所说,要么删除你的捕获或抛出条款。

答案 3 :(得分:0)

您的catch语句捕获所有异常并且不会重新抛出它们,因此此方法不需要throw语句。此外,如果您有一个方法在调用该方法时抛出异常,则必须处理它抛出的异常。

您是否也在同一个包中运行JUnit测试?我无法想象你不会,但至少在eclipse中它在本地目录中查找文件,这对于JUnit和主类来说是相同的。

答案 4 :(得分:0)

尽管所有的答案都告诉你,如果你抓住它就不需要抛出异常,那么你在使用JUnit运行测试时可能获得FileNotFoundException的原因是因为您的测试类可能位于不同的目录中,并且在该情况下,您的文件路径无效。尝试检查相对于测试类的numIn的值,看看是否使用绝对路径或其他解决方案适合您。

答案 5 :(得分:0)

您可能已经忘记向测试案例的主要方法中添加另一个“引发FileNotFoundException”。