Какое фактическое использование "fail" в тестовом случае JUnit?
Какое фактическое использование "fail" в тестовом случае JUnit?
Ответ 1
Некоторые случаи, когда я нашел это полезным:
- отметьте тест, который является неполным, поэтому он терпит неудачу и предупреждает вас, пока вы не закончите его.
- убедитесь, что выбрано исключение:
try{ // do stuff... fail("Exception not thrown"); }catch(Exception e){ assertTrue(e.hasSomeFlag()); }
Примечание:
Так как JUnit4, есть более элегантный способ проверить, что генерируется исключение:
Используйте аннотацию @Test(expected=IndexOutOfBoundsException.class)
Однако это не сработает, если вы также захотите проверить исключение, тогда вам все равно нужно fail()
.
Ответ 2
позволяет сказать, что вы пишете тестовый пример для потока -ve, где тестируемый код должен вызывать исключение
try{
bizMethod(badData);
fail(); // FAIL when no exception is thrown
} catch (BizException e) {
assert(e.errorCode == THE_ERROR_CODE_U_R_LOOKING_FOR)
}
Ответ 3
Я думаю, что обычный случай использования - это вызвать его, когда исключение не было выбрано в отрицательном тесте.
Что-то вроде следующего псевдокода:
test_addNilThrowsNullPointerException()
{
try {
foo.add(NIL); // we expect a NullPointerException here
fail("No NullPointerException"); // cause the test to fail if we reach this
} catch (NullNullPointerException e) {
// OK got the expected exception
}
}
Ответ 4
Я использовал его в случае, когда в моем методе @Before что-то пошло не так.
public Object obj;
@Before
public void setUp() {
// Do some set up
obj = new Object();
}
@Test
public void testObjectManipulation() {
if(obj == null) {
fail("obj should not be null");
}
// Do some other valuable testing
}
Ответ 5
просто используйте:
org.junit.Assert.fail("Exception expected");
Ответ 6
Вот как я использую метод Fail.
Существует три состояния, в которых ваш тестовый пример может оказаться в
- Передано: проверенная функция успешно выполнена и возвращена данные как ожидаемые
- Не пройден: функция под тестированием выполнена успешно, но возвращенные данные не ожидались
- Сбой: функция не выполнялась успешно, и это не было
(в отличие от отрицательных тестов, ожидающих исключения происходит).
Если вы используете eclipse, три состояния обозначаются зеленым, синим и красным маркерами соответственно.
Я использую операцию отказа для третьего сценария.
например.: public Integer add (integer a, Integer b) {return new Integer (a.intValue() + b.intValue())}
- Пройденный случай: a = новый Interger (1), b = новый Integer (2) и возвращаемая функция 3
- Не пройденный случай: a = новый Interger (1), b = новый Integer (2), а функция возвратила значение soem, отличное от 3
- Ошибка: a = null, b = null, и функция выдает исключение NullPointerException
Ответ 7
Я, например, использую fail(), чтобы указать тесты, которые еще не завершены (это происходит). В противном случае они будут демонстрироваться как успешные. Возможно, это связано с тем, что я не знаю какой-то неполной() функциональности, которая существует в NUnit.
Ответ 8
Наиболее важным вариантом использования является проверка исключений.
В то время как junit4 включает ожидаемый элемент для проверки того, произошло ли исключение, похоже, что он не является частью нового junit5. Еще одно преимущество использования fail()
по сравнению с expected
заключается в том, что вы можете объединить его с finally
, позволяющим очистить тестовый файл.
dao.insert(obj);
try {
dao.insert(obj);
fail("No DuplicateKeyException thrown.");
} catch (DuplicateKeyException e) {
assertEquals("Error code doesn't match", 123, e.getErrorCode());
} finally {
//cleanup
dao.delete(obj);
}
Как отмечено в другом комментарии. Испытание на провал до тех пор, пока вы не сможете закончить его реализацию, также кажется разумным.