Перехват нескольких исключений с помощью метода Unit - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь написать JUnit для моего suchAutor() метода. Проблема в том, что я выбрасываю два разных исключения и знаю только, как обрабатывать тесты, которые выдают одно исключение.

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());
    }
}

Ответы [ 3 ]

3 голосов
/ 17 апреля 2019

Вопрос помечен junit5, а у Юпитера есть специальное assertThrows средство:

 @Test
 void failsOnEmptyName(){
     assertThrows(IllegalArgumentException.class, ()-> bibliothek.suchAutor(""));
 }   
2 голосов
/ 17 апреля 2019

Предполагается, что 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

0 голосов
/ 17 апреля 2019

Я только что нажал на быстрое исправление, и теперь это работает: D

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