Как вы утверждаете, что в тестах JUnit 4 выдается определенное исключение?

Вы можете прочитать о каждой части URL-адреса в Wikipedia . Вы найдете там, что http является именем протокола, :9090 определяет, что соединение должно быть установлено на порту # 9090 и т. Д.

1862
задан rgettman 15 November 2013 в 20:28
поделиться

5 ответов

JUnit 4 имеет поддержку этого:

@Test(expected = IndexOutOfBoundsException.class)
public void testIndexOutOfBoundsException() {
    ArrayList emptyList = new ArrayList();
    Object o = emptyList.get(0);
}

Ссылка: https://junit.org/junit4/faq.html#atests_7

2237
ответ дан Pang 15 November 2013 в 20:28
поделиться

JUnit имеет встроенную поддержку этого, с "ожидаемый" атрибут

8
ответ дан Mark Bessey 15 November 2013 в 20:28
поделиться
  • 1
    Ой, перечитайте свой вопрос... doesn' t работают над Windows. Я протестировал код Mac также. – Anthony Cramp 9 October 2008 в 20:31

Будьте осторожным ожидаемым исключением использования, потому что оно только утверждает, что метод выдал то исключение, не конкретная строка кода в тесте.

я склонен использовать это для тестирования проверки параметра, потому что такие методы являются обычно очень простыми, но более сложными тестами, мог бы лучше быть подан с:

try {
    methodThatShouldThrow();
    fail( "My method didn't throw when I expected it to" );
} catch (MyException expectedException) {
}

Применяют решение.

453
ответ дан daveb 15 November 2013 в 20:28
поделиться

Как насчет этого: Поймайте очень общее исключение, удостоверьтесь, что оно делает его из блока выгоды, затем утверждайте, что класс исключения - то, чем Вы ожидаете, что он будет. Это утверждает, перестанет работать если a) исключение имеет неправильный тип (например, если Вы получили Нулевого указателя вместо этого), и b) исключение никогда не выдавалось.

public void testFooThrowsIndexOutOfBoundsException() {
  Throwable e = null;

  try {
    foo.doStuff();
  } catch (Throwable ex) {
    e = ex;
  }

  assertTrue(e instanceof IndexOutOfBoundsException);
}
40
ответ дан Dawood ibn Kareem 15 November 2013 в 20:28
поделиться

Редактировать Теперь, когда вышел JUnit5, лучшим вариантом будет использование Assertions.assertThrows() (см. мой другой ответ).

Если вы не перешли на JUnit 5, но можете использовать JUnit 4.7, вы можете использовать ExpectedException Rule:

public class FooTest {
  @Rule
  public final ExpectedException exception = ExpectedException.none();

  @Test
  public void doStuffThrowsIndexOutOfBoundsException() {
    Foo foo = new Foo();

    exception.expect(IndexOutOfBoundsException.class);
    foo.doStuff();
  }
}

Это намного лучше, чем @Test(expected=IndexOutOfBoundsException. class), потому что тест будет провален, если IndexOutOfBoundsException будет выброшен до foo.doStuff()

Подробности смотрите в этой статье

.
1278
ответ дан 22 November 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: