Да, все верно. Но только ты не после пишешь тесты. А сразу. Сначала тест. потом его реализацию заточенную под правильный результат. Усложняешь тест и опять подгоняешь под правильный результат, с учетом предыдущего теста. И так далее.
Тестирование проверят какой результат возвращается. Чтобы ты не вручную каждый раз все проверял, а сразу. Вот записаны у тебя все тесты на все эти варинанты, ты и тестируешь при каких параметрах все верно возвращается или нет. Допустим на вход один из параметров подал пустым должен получить в ответе
return 'Заполните все поля';
И конечно не совсем так. Вернуться должно толкьо true. А это в лог записать, а на клиенте обработать результат true/false и показать юзеру уже эту инфу.
Т.е результат на вьюхе должен выводиться, не там возвращаться. Можно возвращать код ошибки и на вьюхе обрабатывать. В целом правильней вернуть массив. Один из параметров результат тру/фалс, другой код ошибки, если таковая случилась.
Например
return arrray {
'result' => false,
'code' => self::NOT_VALID_DATA
}
В тестах соот можно и оба параметра проверять.