Grunter
Grunter

Reputation: 73

Junit testing Expected exception: java.io.FileNotFoundException, junit.framework.assertionFailedError

I have some problems getting my JUnit tests to work. I want to test the method if it finds the files or if it doesn't and if it catches it, but I'm not getting the expected results. My filenames are studenter, results and uppgift. Here are the tests I've formatted.

@Test(expected = java.io.FileNotFoundException.class)
public void testGradeAndPrintFileEX() throws Exception {
    System.out.println("gradeAndPrintFile");
    String assignmentFile = "uppgsift";
    String studentFile = "studentder";
    String resultFile = "resuslts";

    Grader instance = new Grader();

    instance.gradeAndPrintFile(assignmentFile, studentFile, resultFile);                
}

@Test(expected = java.io.IOException.class)
public void testGradeAndPrintFileEX2() throws Exception {
    System.out.println("gradeAndPrintFile");
    String assignmentFile = "uppgift";
    String studentFile = "studenter";
    String resultFile = "results";
    Grader instance = new Grader();

    instance.gradeAndPrintFile(assignmentFile, studentFile, resultFile);        
}

and here is my class:

    @Override
    public void gradeAndPrintFile(String assignmentFile, String studentFile, String resultFile) throws FileNotFoundException, IOException {
        student = new Student();

//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        try {
            FileWriter file = new FileWriter(resultFile);
            BufferedReader studentReader = new BufferedReader(new FileReader(studentFile));
            BufferedReader assignmentReader = new BufferedReader(new FileReader(new File(assignmentFile)));

            String assagning;
            Map<String, Integer> hashMap = new HashMap<>();

            while ((assagning = assignmentReader.readLine()) != null) {

                String[] cut = assagning.split(";");
                hashMap.put(cut[0], Integer.parseInt(cut[1]));
            }

            assignment = new Assignment();
            assignment.setLevelForPass(hashMap.get("G"));
            assignment.setLevelForPassWithDistinction(hashMap.get("VG"));

            String studenter;
            String[] studentArray;

            while ((studenter = studentReader.readLine()) != null) {

                studentArray = studenter.split(";");

                eMail = studentArray[2];
                lastName = studentArray[0];
                firstName = studentArray[1];

                student.setEmail(eMail);
                student.setLastName(lastName);
                student.setFirstName(firstName);

                ArrayList<Integer> poangLista = new ArrayList<>();

                for (int i = 0; i < studentArray.length; i++) {
                    if (i > 2) {

                        String numbers = studentArray[i];

                        poangLista.add(Integer.parseInt(numbers));

                    }
                }

                grade = new Grade();
                grade.setUp(student, poangLista, assignment);
                System.out.println(grade.toString());

                file.write(grade.toString() + "\n");
                file.flush();

            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(Grader.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Grader.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

the error im getting is a bunch of red rows witch i have no idea what they mean, they are as follows:

feb 15, 2015 9:05:19 EM grader.Grader gradeAndPrintFile
ALLVARLIG: null
java.io.FileNotFoundException: studentder (Det går inte att hitta filen)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:131)
    at java.io.FileInputStream.<init>(FileInputStream.java:87)
    at java.io.FileReader.<init>(FileReader.java:58)
    at grader.Grader.gradeAndPrintFile(Grader.java:47)
    at grader.GraderTest.testGradeAndPrintFileEX(GraderTest.java:69)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:22)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:532)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1179)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1030)

Upvotes: 1

Views: 7961

Answers (1)

Crazyjavahacking
Crazyjavahacking

Reputation: 9717

Your test will never pass, because you are catching the IOException and not rethrowing it further:

catch (IOException ex) {
    Logger.getLogger(Grader.class.getName()).log(Level.SEVERE, null, ex);
    throw ex; // add this line
}

You should rethrow the exception.

You could remove the catching of FileNotFoundException as it extends IOException and so both can be handled by a single block as I proposed.

Upvotes: 1

Related Questions