دو falsehoold تست نویسی

دو نکته مهم راجب تست نویسی:

اولا که وقتی unit test مینویسید در لحظه باید یک unit رو تست کنید نه بیشتر. که اگه fail شد بدونید کدوم unit فیل شده. به جای اینکه خیلی رو خوانایی تستتون کار کنید رو text ای که برای assertion گذاشتید کار کنید. که اگه fail شد بدونید چرا این اتفاق افتاده

دوما که اصلا و اصلا و ابدا ‍تست کاوریج مهم نیست!! تاکید میکنم تست کاوریج فقط برای لایبری اوپن سورس مهمه! احمقانه ترین measure برای تست نویسی اینه که شما تست کاوریج رو بسنجید.

ریپو تست ACL منو ببینید

ACL Tests

اخرین assertion فیل شد. من دیباگش کردم. باگش این بود که من چک نمیکردم یک معلم وقتی داره دیتا یک دانش آموز دیگه رو میگیره ایا اون دانش آموز تو کلاسشه یا نه. یعنی من یک کدی ننوشته بودم! چیزی که شما با تست کاوریج متوجه نمیشید.

در نهایت به جای اینکه بیام هر روتر رو تست کنم که پرمیشنش مطابق تسک عمل میکنه اومدم اول permission هارو تست کردم, بعد رفتار روتر رو. وقتی رفتار روتر رو تست کردم خود پرمیشن رو ماک کردم که کلا به من برای همه اندپوینت ها همیشه دسترسی بده!! چرا؟‌چون وقتی دارم روتر رو تست میکنم فقط و فقط و فقط باید روتر رو تست کنم نه چیز دیگه ای رو.

۱. چون unit test من پاس شده پس software requirement من satisfy شده و محصول من کار میکنه

۲. تست کاوریج بالا و داشتن assertion زیاد یعنی من تست هام خیلی خوبه و باگ برنامم بسیار کمه

وقتی میگم تست باید رفتار محصول و software requirement  رو تست کنه یعنی چی؟ برای یک لاگین بیایم یک software requirement بنویسیم برای لاگین:

User shall be required to change his/her password every 3 months

Login response time on backend shall be time contrainst of 1 second to avoid timing attacks

Login response shall be with respect to Auth0, handled by JWT in cookie with CSRF in header, to be considered as safe

User shall not attempt to unsuccessfull login more than 20 times with an IP Address

User shall be redirected to dashboard after a successfull login

User shall be asked for username and password, to match credential in database, to perform a a successfull login

User shall not be aware of the spefiec reason behind unsuccessfull login, such as "Wrong Password" or "Wrong Email"

Optionally, the user may enable two-factor authentication for added security. This could include SMS, authenticator apps, or hardware tokens.