Как ловить исключения в JUnit - PullRequest
3 голосов
/ 28 мая 2019

Мой тест JUnit не перехватывает исключение из-за моего оператора return в блоке catch. Когда я удаляю возвращаемое утверждение, тест проходит. Я хочу, чтобы мой модульный тест работал с возвращающим оператором, если возникает исключение.

Я также пробовал JUnit 5, но это не решает проблему.

Мой метод:

public ArrayList<Action> parsePlaByPlayTable() {
    ArrayList<Action> actions = new ArrayList<>();
    Document document = null;

    try {
      document = Jsoup.connect(url).get();
    } catch (Exception e) {
      log.error(e.getMessage());
      return new ArrayList<>();
    }

    // if the exception occurs and there is no return in the catch block,
    // nullPointerException is thrown here
    Element table = document.getElementById("pbp"); 

    // more code. . .
}

Мой тест:

  @Test(expected = Exception.class)
  public void testParsePlaByPlayTableInvalidUrl() {
    PlayByPlayActionHtmlParser parser = new PlayByPlayActionHtmlParser("https://www.basketbal-reference.com/oxscores/pbp/201905160GS.html");
    ArrayList<Action> actions = parser.parsePlaByPlayTable();
  }

Ответы [ 2 ]

4 голосов
/ 28 мая 2019

Поскольку вы проглатываете исключение в блоке catch и возвращаете пустой список. Единственный способ проверить, произошло ли исключение, состоит в том, чтобы утверждать, что возвращаемый список пуст.

@Test
public void testParsePlaByPlayTableInvalidUrl() {
    PlayByPlayActionHtmlParser parser = new PlayByPlayActionHtmlParser("https://www.basketbal-reference.com/oxscores/pbp/201905160GS.html");
    ArrayList<Action> actions = parser.parsePlaByPlayTable();
    Assert.assertTrue(actions.isEmpty());
}

Вам также необходимо удалить (expected = Exception.class) из аннотации @Test. Потому что исключение никогда не будет выброшено.

0 голосов
/ 28 мая 2019

Вы перехватываете исключение с помощью блока try-catch, так что throw никогда не достигнет метода test: все, что вам нужно сделать, это просто удалить этот try catch:

public ArrayList<Action> parsePlaByPlayTable() {
    //...
    document = Jsoup.connect(url).get();
    //...
}

тогда ваш тест будет работать нормально, так как @Test(expected = Exception.class) поймает ваше исключение, успешно пройдя тест

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...