使用 Unit 方法捕获多个异常

Catching multiple exceptions with Unit Method

我正在尝试为我的 suchAutor() 方法编写一个 JUnit。 问题是我抛出两个不同的异常,我只知道如何处理抛出一个异常的测试。

public Buch[] suchAutor(String gesuchterName) throws IllegalArgumentException, FileNotFoundException {
    if (gesuchterName == "") {
        throw new IllegalArgumentException("Bitte geben sie einen Nachnamen ein.");
    }
    Buch[] erg = new Buch[0];
    int arraylength = 0;
    Boolean found = false;
    for (int i = 0; i < buecher.length; i++) {
        for (int u = 0; u < buecher[i].getAutoren().length; u++) {
            if (buecher[i].getAutoren()[u].getNachname() == gesuchterName) {
                found = true;
                arraylength++;
                erg = Arrays.copyOf(erg, arraylength);
                erg[arraylength - 1] = buecher[i];
            }
        }
    }
    if (found) {
        System.out.println(Arrays.toString(erg));
        return erg;
    } else {
        throw new FileNotFoundException("Zu dem gesuchten Autor wurden keine Bücher gefunden.");
    }
}

@Test(expected = Exception.class)
public void testSuchAutorGrenzwert() {
    try {
        bibliothek.suchAutor("");
    } catch (IllegalArgumentException e) {

    } catch (FileNotFoundException e) {
        System.out.println(e.getMessage());
    }
}

假设 Junit4:

public class MyTest {
   @Rule
   public ExpectedException thrown = ExpectedException.none();

   @Test 
   public void myTest() throws IllegalArgumentException, FileNotFoundException {
      thrown.expect(IllegalArgumentException.class);
      myObject.suchAutor("");
   }

   @Test 
   public void myOtherTest() throws IllegalArgumentException, FileNotFoundException {
      thrown.expect(FileNotFoundException.class);
      myObject.suchAutor("An Unknown Autor");
   }
}

在上面我们使用了相同的规则,即下面的代码应该抛出异常,如果测试没有抛出异常或抛出 IllegalArgumentException 以外的异常,那么测试将失败。

我们设置了规则,默认情况下它不期望任何异常,任何不测试异常的测试都应该正常工作。

JUnit Docs

这个问题是用junit5标记的,Jupiter有专门的assertThrows设施:

 @Test
 void failsOnEmptyName(){
     assertThrows(IllegalArgumentException.class, ()-> bibliothek.suchAutor(""));
 }   

我刚刚按了快速修复,现在可以使用了:D

    @Test
    public void testSuchAutorGrenzwert() {
        try {
            bibliothek.suchAutor("");
        } catch (IllegalArgumentException | FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.getMessage();
        }
    }