Отже, у мене є модуль аутентифікації, про який я писав деякий час тому. Тепер я бачу помилки в моєму шляху і пишу для нього одиничні тести. Під час написання одиничних тестів мені важко придумати хороші імена та хороші області для тестування. Наприклад, у мене є такі речі
- ПотрібенLogin_should_redirect_when_not_logged_in
- ПотрібенLogin_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
тестую, додаючи додані коментарі, і використовую коментарі, щоб відзначити, які результати я очікую. Якщо це особистий проект, знайдіть якийсь стиль, в якому ви відчуваєте себе комфортно, і дотримуйтесь цього.