Неопределенное исключение - это сбой теста, поэтому вам не нужно и не нужно его поймать.
@Test
public void canConvertStringsToDecimals() {
String str = "1.234";
Assert.assertEquals(1.234, service.convert(str), 1.0e-4);
}
До service
не бросаться IllegalArgumentException
, потому что str
имеет десятичную точку в нем, что будет просто провал теста.
Ожидаемое исключение должно обрабатываться необязательным аргументом expected
@Test
.
@Test(expected=NullPointerException.class)
public void cannotConvertNulls() {
service.convert(null);
}
Если программист поленился и бросил Exception
, или если он был service
возвращение 0.0
, тест проваливается. Только NPE
преуспеет. Обратите внимание, что также работают подклассы ожидаемого исключения. Это редкость для NPE
s, но распространено с IOException
s и SQLException
s.
В редком случае, когда вы хотите протестировать конкретное сообщение об исключении, вы используете новый ExpectedException
JUnit @Rule
.
@Rule
public ExpectedException thrown= ExpectedException.none();
@Test
public void messageIncludesErrantTemperature() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("-400"); // Tests that the message contains -400.
temperatureGauge.setTemperature(-400);
}
Теперь, если setTemperature не бросает IAE
и сообщение содержит температуру пользователь пытался установить, тест не пройден. Это правило может использоваться более сложными способами.
Ваш пример может лучше всего быть обработаны:
private void testNumber(String word, int number)
throws OutOfRangeNumberException {
assertEquals(word, service.convert(number));
}
@Test
public final void testZero()
throws OutOfRangeNumberException {
testNumber("zero", 0);
}
Вы можете встраивать testNumber
; теперь это мало помогает. Вы можете превратить это в параметризованный тестовый класс.
ExpectedException является предпочтительным способом проверить ожидаемых исключений. –
Я согласен, и я уже поддержал ответ Эрика. – javadeveloper
Вам нужно только ExpectedException, если вам нужно проверить структуру исключения. Например, предполагается, что в CmisExceptions есть определенная причина сбоя. Я должен был написать тесты, чтобы проверить это, и для этой цели я использовал комбинации Hamcrest. Если вы просто ожидаете исключения, используйте аргумент для @Test. –