Подтвердить что ты не робот

Утверждать против проверки в Селене

Проверки селена обычно выполняются в двух вариантах: assertFoo и verifyFoo. Я понимаю, что assertFoo терпит неудачу во всей тестовой папке, тогда как verifyFoo просто отмечает отказ этой проверки и пропускает тестовый файл.

Итак, с помощью verifyFoo я могу получить результаты теста для нескольких условий, даже если один из них не работает. С другой стороны, одной неудачной проверки для меня достаточно, чтобы знать, что мои изменения нарушили код, и я все равно должен их исправить.

Итак, мой вопрос:
В каких конкретных ситуациях вы предпочитаете один из двух способов проверки другого? Каковы ваши впечатления, которые мотивируют ваше мнение?

4b9b3361

Ответ 1

Я бы использовал assert() как точку входа ( "шлюз" ) в тест. Только если это утверждение будет выполнено, будут выполняться проверки verify(). Например, если я проверяю содержимое окна в результате ряда действий, я бы assert() присутствовал в этом окне, а затем verify() содержимое.

Пример, который я часто использую - проверка оценок в jqgrid: assert() наличие сетки и verify() оценки.

Ответ 2

Я столкнулся с несколькими проблемами, которые были преодолены с помощью

assert*()

вместо

verify*()

Например, при проверке формы, если вы хотите проверить элемент формы, использование

verifyTrue(...);
просто пройдет тест, даже если строка отсутствует в форме.

Если вы замените assert на проверку, то он будет работать как ожидалось.

Я настоятельно рекомендую использовать assert *().

Ответ 3

Если вы выполняете тесты Selenium в производственной системе и хотите, чтобы вы вошли в систему как тестовый пользователь, например, вместо вашей личной учетной записи, это хорошая идея, чтобы сначала утверждать, что правильный пользователь зарегистрирован прежде чем запускать любые действия, которые имели бы непреднамеренные эффекты, если они были использованы случайно.

Ответ 4

Обычно вам следует придерживаться одного утверждения на каждый тестовый пример, и в этом случае разница сводится к любому разрыву кода, который должен быть запущен. Но вы должны, вероятно, поместить это в метод @After.

У меня было довольно много проблем с методами verify*() в SeleneseTestBase (например, они используют System.out.println(), а com.thoughtworks.selenium.SeleneseTestBase.assertEquals(Object, Object) просто не делают то, что вы ожидаете), поэтому я прекратил их использовать.