در این قسمت از آموزش نحوه اجرای سناریوهای تست در SpecFlow را خواهیم آموخت. SpecFlow برای اجرای تستهای پذیرش، چارچوبهای Unit Test متفاوتی را پشتیبانی میکند. به عنوان نمونه Nunit، Xunit، MS Test و…. . بنابراین برای اجرای تست پذیرش لازم است ابتدا چارچوب Unit Test خود را انتخاب نمایید. در این آموزش Nunit به عنوان چارچوب Unit Test مورد استفاده قرار میگیرد. در کنسول مدیریت پکیج Nuget، Nunit را با دستور زیر به رفرنسهای پروژه اضافه نمایید.
PM > install-package Nunit
حال مطابق تصویر ۱۹ روی Feature اضافه شده به پروژه کلیک راست نموده و گزینه Run SpecFlow Scenarios را انتخاب نمایید. برای مشاهده نتیجه اجرای تست از Toolbar گزینه Test-> windows-> Test Explorer را انتخاب نمایید.
همانطور که در تصویر ۱۹ مشاهده مینمایید، از آنجایی که هیچ پیادهسازی معادلی در گامهای سناریو وجود ندارد، تست اجرا نشده و پیغام یک یا چند گام پیادهسازی نشده است، ارائه میشود. بنابراین تا این جای پروژه در جمع مشتری، تستر و توسعهدهنده، سناریوی پذیرش سیستم جمع آوری شده و در ابتدای توسعه نرمافزار درک مشترک مناسبی بین ذینفعان سیستم، بدون ابهام به وجود آمده است.
از این جا به بعد نوبت توسعهدهنده و تستر است تا به صورت موازی، توسعه Test Caseها و کد سیستم را پیش ببرند. این کار را برای سناریوی ورود کاربر انجام میدهیم. سناریوی ورود کاربر در قسمتهای پیشین آموزش را به شکل پارامتری در میآوریم. این سناریو در تصویر ۲۰ نمایش داده شده است.
حال تستر و توسعهدهنده، تولید کد را آغاز میکنند. اگر تستر کد تست را توسعه دهد و آنرا اجرا کند، به دلیل آن که پیادهسازی معادلی برای کد تست وجود ندارد، تست رد1 میشود. پیادهسازی کلاسها و متدهای برنامه که انجام شد، تست مربوط به سناریو باید اجرا شود. چنانچه تست با موفقیت2 پشت سر گذاشته شود، توسعه کد سیستم توقف مییابد. در تصویر ۲۱ یک کلاس به پروژه Unit Test خود اضافه نمودهایم و کد اعتبارسنجی تست را در آن قرار دادهایم.
گامهای پیادهسازی تست نیز در تصویر ۲۲ نمایش داده شده است. برای سهولت در درک گامهای سناریو، تنها از گام دریافت نام کاربری به بعد پیادهسازی را انجام دادهایم. در این گام نام کاریری یا همان ایمیل را در.current ScenarioContext به عنوان یک متغیر ذخیره میکنیم تا بین گامهای سناریو قابل استفاده مجدد باشد. سپس رمز عبور موجود در تعریف سناریو را به کلاس پیادهسازی شده که یک شی از آن ساختهایم انتقال میدهیم. از نتیجه خروجی متد اعتبارسنجی رمز عبور، برای صحتسنجی3 تست استفاده میکنیم. یک تست بدون صحت سنجی اعتباری ندارد. برای این منظور از اعلانها4 استفاده میشوند. به همین منظور در آخرین گام سناریو، بررسی میکنیم که اگر نام کاربری ‘ali.md@example.com’ باشد، خروجی متد اعتبارسنجی رمز عبور باید “NotOK” را برگرداند و اگر خروجی متد با خروجی مورد نظر ما تطابق داشته باشد، پیغام مناسب داده میشود. در غیر این صورت اجرای تست با شکست مواجه میشود. در ورودی بعدی Test Case خروجی مورد انتظار ما که “OK” است چک میشود و اگر هماهنگی داشته باشد، پیغام مناسب نمایش داده میشود و در غیر این صورت اجرای تست با شکست مواجه میشود.
اگر به testexplorer پروژه نگاه کنید، متوجه خواهید شد که دو Test Case با نام Visitors are NOT able to register وجود دارد اما هر کدام از این Test Caseها دادههای ورودی مرتبط به خود را مطابق با تعریف سناریو دارند. یعنی یکی با نام کاربری ‘ali.md@example.com’ و سایر اطلاعات و دیگری با نام کاربری ‘reza.md@example.com’ و سایر اطلاعات تعریف شدهاند. روی سناریو SpecFlow کلیک راست کرده و Run Specflow Scenarios را انتخاب نمایید. پس از اجرای TestCaseها اگر تست با موفقیت طی شود، نتیجهای همانند تصویر ۲۳ مشاهده خواهید کرد.
چنانچه به دلایلی در کلاس اعتبارسنجی تغییری رخ دهد که منجر به شکست تست گردد، تصویری مشابه با تصویر ۲۴ مشاهده خواهید کرد. با شکست تست، کد سیستمیِ تغییر یافته باید بررسی گردد و توسعه ادامه یابد تا تست با موفقیت پشت سر گذاشته شود.
سناریو و گامهای تست امکان Debugging نیز دارند. برای این منظور روی سناریو یا گام مورد نظر breakpoint قرار دهید و با کلیک راست روی سناریوی Specflow گزینه Debug SpecFlow Scenarios را انتخاب نمایید.
این آموزش به سفارش تیستن و به قلم سرکار خانم مهندس سیده مهسا میری آماده گردیده، و واحد آموزش تیستن نیز آنرا منتشر کرده است.
تمام قسمتهای آموزش Specflow، به صورت دستهبندی شده از اینجا در دسترس است.
ممنون از مطلب مفیدتون