Правильное юнит-тестирование
Здравствуйте! Подскажите, пожалуйста, как правильно будет организовать тесты методов в контроллере?
Есть контроллер, у которого есть метод, отвечающий за регистрацию нового пользователя. С фронта приходят данные, и они предварительно обрабатываются, на правильность емаила, длину пароля и т.д. Так вот, для каждого кейса создавать свой тест или все кейсы проходить в одном тесте?
class RegisterController{
public regActionAjax(){
$email = $this->getParam('email');
$pass = $this->getParam('pass');
if(empty($email)){
$code = 1;
$this->jsonError($code, 'Empty email');
}
if(empty($pass)){
$code = 2;
$this->jsonError($code, 'Empty password');
}
...
}
}
Вариант теста 1:
class RegisterControllerTest{
public testRegAction(){
/**
* RegisterController_regAction($email, $pass)
* Метод имитации отправки POST запроса,
* написал так, что бы лишней лапши не было.
*/
// Отправляем пустой email
$response = $this->RegisterController_regAction('', '123');
$this->asserEqual(1, $response->code);
// Отправляем пустой пароль
$response = $this->RegisterController_regAction('example@gmail.com', '');
$this->asserEqual(2, $response->code);
...
}
}
Вариант теста 2:
class RegisterControllerTest{
public testEmptyEmail(){
// Отправляем пустой email
$response = $this->RegisterController_regAction('', '123');
$this->asserEqual(1, $response->code);
}
public testEmptyPass(){
// Отправляем пустой пароль
$response = $this->RegisterController_regAction('example@gmail.com', '');
$this->asserEqual(2, $response->code);
}
...
}
Источник: Stack Overflow на русском