Ожидаемое исключение ожидается в области выполнения тестового метода whole независимо от того, не выполняются ли другие операторы.
Поэтому вы должны создать метод тестирования по возможному сценарию.
@Test(expected = IllegalArgumentException.class)
public void add_with_index_greater_than_size() {
l0.add(42, 10); // index > size
}
@Test(expected = IllegalArgumentException.class)
public void add_with_index_less_than_zero() {
l0.add(42, -1);
}
@Test(expected = IllegalArgumentException.class)
public void add_with_null_arg() {
l0.add(null, 10);
}
@Test
public void add() {
l0.add(42, 10);
Assert.assertEquals(42, l0.get(10));
}
Несмотря на то, что вы все еще можете использовать один метод тестирования с таким количеством try/catch
операторов, как и сценарии с ошибками для тестирования, как показано в ответ SilverNak , я бы не рекомендовал его для удобства чтения.
Обратите внимание, что помимо вашего случая указание каждого отдельного сценария в своем собственном методе является хорошей практикой, поскольку делает тесты более читабельными, а также упрощает / облегчает исправление теста, который не пройден, поскольку его ответственность яснее и четко определена.
JUnit 5 улучшений
Обратите внимание, что в последней версии JUnit вы можете собирать некоторые распространенные случаи одним и тем же способом, не уменьшая читабельность кода.
Вы можете собрать недопустимые случаи с неверным индексом, таким как:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
...
@Test
public void add_with_index_less_than_zero_or_greater_than_size() {
Assertions.assertThrows(IllegalArgumentException.class,
() -> l0.add(42, 10));
Assertions.assertThrows(IllegalArgumentException.class,
() -> l0.add(42, -1));
}
Но я бы оставил это в отдельном методе:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
...
@Test
public void add_with_null_arg() {
Assertions.assertThrows(IllegalArgumentException.class,
() -> l0.add(null, 10));
}