AFAIK, модульное тестирование НЕ является функциональным тестированием. Позвольте мне объяснить с небольшим примером. Вы хотите проверить, работает ли функция входа в почтовое веб-приложение или нет, так же, как и пользователь. Для этого ваши функциональные тесты должны быть такими:
1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!"
Должны ли наши функциональные тесты проверять, можем ли мы войти в систему с неверными данными? Например. Электронная почта не имеет символа @, имя пользователя содержит более одной точки (разрешена только одна точка), .com появляется перед @ и т. Д.? Вообще нет! Этот вид тестирования входит в ваши юнит-тесты.
Вы можете проверить, отклоняются ли недействительные входные данные в модульных тестах, как показано в тестах ниже.
class LoginInputsValidator
method validate_inputs_values(email, password)
1-If email is not like string.string@myapp.com, then throw error.
2-If email contains abusive words, then throw error.
3-If password is less than 10 chars, throw error.
Обратите внимание, что функциональный тест 4 фактически выполняет то, что делает модульный тест 1. Иногда функциональные тесты могут повторять некоторые (не все) тесты, выполненные модульными тестами, по разным причинам. В нашем примере мы используем функциональный тест 4, чтобы проверить, появляется ли конкретное сообщение об ошибке при вводе неверного ввода. Мы не хотим проверять, отклонены ли все неверные данные или нет. Это работа модульных тестов.