# Asserts

Одна из самых распространенных ошибок начинающих автоматизаторов - отсутствие в тесте проверок. При этом необходимо учитывать, что само по себе действие не заменяет проверку. При ручном тестировании часть шагов выполняется с использованием средств ввода (действия, выполняемые с помощью клавиатуры и мыши), а проверки при этом выполняются без такового. Например:

| **Действие**                                 | **используемые инструменты** |
| -------------------------------------------- | ---------------------------- |
| Запустить приложение                         | мышь + клавиатура            |
| Перейти в личный кабинет                     | мышь                         |
| Убедиться, что отобразились необходимые поля | зрение                       |

Поскольку последнее действие не подразумевает прямого взаимодействия с компьютером, начинающие автоматизаторы про него забывают и не автоматизируют. Хотя в сущности это самое важное действие в тесте. Представьте себе, что мы убрали это действие в ручных тестах. Тест превращается в бессмысленный набор манипуляций.

А значит для полноценного автоматизированного тестирования, чтобы оно не превратилось в такой-же бессмысленный набор действий, нам необходимо автоматизировать проверки и по их результату определять, успешно выполнен тест, или он "завален".

На помощь в этом нам приходят проверки, реализованные в рассмотренных юнит-тестовых фреймворках: ***TestNG*** и ***JUnit***.

## Основные проверки:

| **JUnit**                             | **TestNG**                                  | **Что проверяется**                                                                    |
| ------------------------------------- | ------------------------------------------- | -------------------------------------------------------------------------------------- |
| assertTrue(boolean)                   | assertTrue(boolean)                         | Проверяет, что передаваемое выражение истинно (возвращает значение true)               |
| assertFalse(boolean)                  | assertFalse(boolean)                        | Проверяет, что передаваемое выражение ложно (возвращает значение false)                |
| assertEquals(expected, actual)        | assertEquals(actual, expected)              | Проверяет, что передаваемые параметры равны                                            |
| assertArrayEquals(expecteds, actuals) | assertEquals(actual\[], expected\[])        | Проверяет, что передаваемые массивы равны                                              |
| -                                     | assertEqualsNoOrder(actual\[], expected\[]) | Проверяет, что передаваемые массивы равны, без учета порядка элементов                 |
| assertNotSame(expected, actual)       | assertNotEquals(actual, expected)           | Проверяет, что передаваемые объекты не равны (JUnit - по ссылке, TestNG - по значению) |
| fail()                                | fail()                                      | "заваливает" тест                                                                      |

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