Java / JUnit - AssertTrue vs AssertFalse
Я довольно новичок в Java и следую за учебники для начинающих Eclipse Total. Все они очень полезны, но в Уроке 12, он использует assertTrue
для одного тестового случая и assertFalse
для другого. Вот код:
// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly", ml.checkOut(b1, p1)); // If checkOut fails, display message
assertEquals("Thomas", b1.getPerson().getName());
assertFalse("Book was already checked out", ml.checkOut(b1,p2)); // If checkOut fails, display message
assertEquals("Book was already checked out", m1.checkOut(b1,p2));
Я искал хорошую документацию по этим методам, но ничего не нашел. Если мое понимание верно,assertTrue
а также assertFalse
отображение строки, когда второй параметр принимает значение false. Если да, то в чем смысл иметь их обоих?
Edit: думаю, я вижу, что меня смутило. Возможно, автор поместил оба из них, чтобы показать их функциональность (в конце концов, это учебник). И он установил один, который не сработает, чтобы сообщение было распечатано и сообщило мне, почему оно не сработало. Начинает обретать смысл...Я думаю, что это объяснение, но я не уверен.
7 ответов
assertTrue
завершится ошибкой, если второй параметр будет равен false
(другими словами, это гарантирует, что значение true). assertFalse
совсем наоборот.
assertTrue("This will succeed.", true);
assertTrue("This will fail!", false);
assertFalse("This will succeed.", false);
assertFalse("This will fail!", true);
как и во многих других случаях, лучший способ познакомиться с этими методами-просто экспериментировать : -).
ваше понимание неверно, в случаях, подобных этим, всегда консультируйтесь с JavaDoc.
assertFalse
public static void assertFalse(java.lang.String message, boolean condition)
утверждает, что условие ложно. Если это не так, он бросает AssertionError с данным сообщением.
параметры:
message
- идентифицирующее сообщение для AssertionError (null okay)condition
- условие проверено
дело в семантике. В assertTrue вы утверждаете, что выражение истинно. Если это не так, то он отобразит сообщение, и утверждение потерпит неудачу. В assertFalse вы утверждаете, что выражение оценивается как false. Если это не так, отображается сообщение и утверждение завершается ошибкой.
assertTrue (message, value == false) == assertFalse (message, value);
они функционально одинаковы, но если вы ожидаете, что значение будет false затем использовать assertFalse
. Если вы ждете значение правда, а затем использовать assertTrue
.
Я думаю, это просто для вашего удобства (и читатели вашего кода)
ваш код и ваши модульные тесты должны быть идеально самодокументированы, с которыми помогает этот API,
подумайте о том, что более ясно читать:
AssertTrue(!(a > 3));
или
AssertFalse(a > 3);
когда вы открываете свои тесты после xx месяцев, когда ваши тесты внезапно терпят неудачу, вам потребуется гораздо меньше времени, чтобы понять, что пошло не так во втором случае (мое мнение). Если вы не согласны, вы можете всегда придерживайтесь AssertTrue для всех случаев:)
ваша первая реакция на эти методы довольно интересно. Я буду использовать его в будущих аргументах, что assertTrue и assertFalse не самые дружественные инструменты. Если бы вы использовали
assertThat(thisOrThat, is(false));
это гораздо более читабельно, и он печатает лучшее сообщение об ошибке тоже.
assertTrue
произойдет сбой, если проверенное значение равно false, и assertFalse
будет делать обратное: сбой, если проверенное значение true.
другое дело, ваши последние assertEquals, скорее всего, потерпят неудачу, так как он будет сравнивать строку "книга уже проверена" с выходом m1.проверка (b1, p2). Нужен третий параметр (второе значение для проверки на равенство).
курс содержит логическую ошибку:
assertTrue("Book check in failed", ml.checkIn(b1));
assertFalse("Book was aleready checked in", ml.checkIn(b1));
в первом утверждении мы ожидаем, что проверка вернет True (потому что проверка успешна). Если это не удастся, мы напечатаем сообщение типа " ошибка регистрации книги. Теперь во втором assert мы ожидаем, что проверка завершится неудачей, потому что книга была зарегистрирована уже в первой строке. Поэтому мы ожидаем, что проверка вернет False. Если по какой-то причине checkin возвращает True (чего мы не ожидаем), то сообщение никогда не должно быть " Book был уже зарегистрирован", потому что проверка прошла успешно.