Итак, у меня есть модуль аутентификации, который я написал некоторое время назад. Теперь я вижу ошибки моего пути и пишу для него юнит-тесты. При написании юнит-тестов мне трудно придумывать хорошие имена и хорошие области для тестирования. Например, у меня есть такие вещи, как
- RequiresLogin_should_redirect_when_not_logged_in
- RequiresLogin_should_pass_through_when_logged_in
- Login_should_work_when_given_proper_credentials
Лично я думаю, что это немного некрасиво, хотя это кажется "правильным". У меня также возникают проблемы с дифференциацией тестов, просто просматривая их (мне нужно прочитать имя метода, по крайней мере, дважды, чтобы узнать, что только что провалилось)
Итак, я подумал, что, возможно, вместо того, чтобы писать тесты, которые просто тестируют функциональность, возможно, написать набор тестов, которые охватывают сценарии.
Например, это тестовая заглушка, которую я придумал:
public class Authentication_Bill
{
public void Bill_has_no_account()
{ //assert username "bill" not in UserStore
}
public void Bill_attempts_to_post_comment_but_is_redirected_to_login()
{ //Calls RequiredLogin and should redirect to login page
}
public void Bill_creates_account()
{ //pretend the login page doubled as registration and he made an account. Add the account here
}
public void Bill_logs_in_with_new_account()
{ //Login("bill", "password"). Assert not redirected to login page
}
public void Bill_can_now_post_comment()
{ //Calls RequiredLogin, but should not kill request or redirect to login page
}
}
Это слышал о шаблоне? Я видел истории о приеме и тому подобное, но это принципиально иное. Большая разница в том, что я придумываю сценарии, чтобы «вывести» тесты из строя. Вместо того, чтобы вручную пытаться придумать возможные взаимодействия, которые мне нужно будет проверить. Кроме того, я знаю, что это поощряет модульные тесты, которые не проверяют только один метод и класс. Я думаю, что это нормально, хотя. Кроме того, я знаю, что это вызовет проблемы, по крайней мере, для некоторых платформ тестирования, поскольку они обычно предполагают, что тесты независимы друг от друга и порядок не имеет значения (где это будет в этом случае).
Во всяком случае, это рекомендуемый шаблон вообще? Или это было бы идеально подходит для интеграционных тестов моего API, а не в качестве «модульных» тестов? Это всего лишь личный проект, поэтому я открыт для экспериментов, которые могут или не могут пойти хорошо.
_test
добавлением, и использую комментарии, чтобы отметить, каких результатов я ожидаю. Если это личный проект, найдите какой-то стиль, который вам удобнее, и придерживайтесь его.