بعد از این درس چه کاری میتوانی انجام بدهی؟
- Arrange–Act–Assert را بهکار ببری
- dependency را در تست جایگزین کنی
- پیام کاربر را از لاگ فنی جدا کنی
C# را ساده بفهم
C# مثل یک کارگاه مهندسی با قراردادهای روشن است؛ نوعها، کلاسها و interfaceها کمک میکنند اجزای اپ، وبسرویس یا بازی جدا اما هماهنگ کار کنند.
تستی که فقط تعداد خطها را زیاد کند مفید نیست؛ نام و انتظار باید قانون واقعی را مستند کنند.
چرا مهم است؟ تست ثابت یا دادهمحور را در xUnit تعریف میکند.
اولین تمرین تو: یک Theory برای مبالغ ۰ و منفی بساز و یک تست مستقل برای سفارش معتبر اضافه کن.
از یک مثال کوچک شروع کن
تست خوب یک رفتار را با نام واضح ثبت میکند. dependency بیرونی را fake کن تا تست سریع و قطعی بماند. در production جزئیات exception را در لاگ ساختاریافته نگه دار و پیام ساده و غیرحساس به کاربر بده؛ رمز، token و داده شخصی را وارد لاگ نکن.
۱. Arrange
سرویس و fake repository را آماده کن.
۲. Act
ثبت سفارش نامعتبر را در delegate اجرا کن.
۳. Assert
exception درست و صفر بودن فراخوانی Save را بررسی کن.
تستی که فقط تعداد خطها را زیاد کند مفید نیست؛ نام و انتظار باید قانون واقعی را مستند کنند.
سه قطعهای که باید بفهمی
Fact/Theory
تست ثابت یا دادهمحور را در xUnit تعریف میکند.
Fake
پیادهسازی ساده و کنترلشده dependency برای تست است.
Structured logging
داده قابل جستوجو را با فیلدهای نامدار ثبت میکند.
رد سفارش با مبلغ صفر بدون تماس با repository
اگر قانون اعتبارسنجی شکست خورد، ذخیرهسازی نباید صدا زده شود. تست باید هم exception و هم نبود اثر جانبی را بررسی کند.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
بررسی ساختار تمرین
این صفحه کامپایلر کامل C# نیست؛ ساختار تمرین را صادقانه بررسی میکند و خروجی مورد انتظار را نشان میدهد. برای اجرای کامل به محیط رسمی همان زبان نیاز است.
یک بخش را تغییر بده و دکمه بررسی را بزن.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
یک Theory برای مبالغ ۰ و منفی بساز و یک تست مستقل برای سفارش معتبر اضافه کن.
این سه اشتباه را انجام نده
وابستگی تست واحد به دیتابیس واقعی
Assert نکردن اثر جانبی
ثبت داده حساس در لاگ خطا
با 5 سؤال مطمئن شو که مفهوم را گرفتهای
چرا SaveCount را بررسی میکنیم؟
تست واحد dependency بیرونی را چگونه مدیریت میکند؟
کدام داده نباید لاگ شود؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
فهمیدی، تغییر دادی، نتیجه را توضیح دادی؟
فقط در این صورت درس را کامل کن و سراغ مرحله بعد برو.