در قسمت دوم آموزش SpecFlow بنا داریم تا نشان دهیم یک ویژگی نمونه به همراه سناریو آن چگونه ایجاد میشود و چگونه از مراحل سناریوی تعریف شده به زبان تعریفی قابل درک برای مشتری در سناریوها و به مراحل تست پذیرش و کد میرسیم.
در ابتدا به نظر میرسد مروری بر مفاهیم BDD مفید واقع شود. BDD که از این پس توسعه مبتنی بر رفتار1 نامیده میشود در سال ۲۰۰۹ توسط دَن نورث(Dan North)، معرفی شد. توسعه مبتنی بر رفتار، بر تست یک کارکرد2 قبل از پیادهسازی آن با توجه به ارزشهای کسب و کار3 تاکید دارد. بنابراین تنها زمانی یک کد نوشته میشود که یک تست خودکار معادل Fail شده داشته باشد. پس از Fail شدن تست، توسعهدهنده تا جایی پیادهسازی را انجام میدهد که تست مربوط به آن بخش کد Pass شود. در این میان بهبود مستمر کد4 نیز انجام میشود.
توسعه مبتنی بر رفتار برای توسعه تستها از شرح داستانهای کاربری5 استفاده میکند. یک شرح داستان کاربر عبارتست از یک یا چند جمله از زبان مشتری که نیازها و کارکردهای مورد نیاز نیاز خود را به عنوان بخشی از کار خود ضبط میکند و در قالب چه کسی، چه چیزی را به چه منظور میخواهد، مدل میشود. (“In order to< receive benefit> as a <role>, I want <goal, desire>”) شرح داستان کاربر، آنچه را که برای مشتری ارزشمند است مشخص میکند و به چگونگی فراهم شدن این ارزشها6 در سیستم کاری ندارد. در حالی که کد با چگونگی فراهم شدن و پیادهسازی ارزشها در سیستم سر و کار دارد. بنابراین برای پر شدن این فاصله، لازم است تا سناریوها یا مثالها7 مطرح شوند.
بنابراین برای شروع کار با SpecFlow باید یک Feature یا شرح داستان کاربر به همراه سناریوهای مربوط به Feature را تعریف نمایید. برای این کار، در پروژه Unit Test خود یک آیتم جدید از نوع SpecFlow Feature File اضافه نمایید و نام دلخواه خود را به آیتم Feature بدهید. یک Feature File به طور پیشفرض همانند تصویر ۴ به پروژه شما اضافه میشود.
Feature اضافه شده با کلمه کلیدی Feature بیانگر نیاز مشتری بر جمع اعداد است. یک سناریوی نمونه برای جمع دو عدد با کلمه کلیدی Scenario بر اساس فرمت Given,When,Then نمایش داده شده است. بر اساس تعریف این سناریو، چنانچه عدد ۵۰ و ۷۰ وارد ماشین حساب شوند، زمانی که کلید “اضافه” زده میشود، نتیجه جمع دو عدد باید نمایش داده شود. هم چنین یک برچسب8 با کلمه کلیدی @mytag در ابتدای نام سناریو دیده میشود. از برچسبگذاری برای دستهبندی بهتر سناریوها استفاده میشود. علاوه بر دستهبندی، در SpecFlow این امکان وجود دارد تا مثلا قبل از اجرای تست مربوط به یک سناریو، تست مربوط به یک سناریوی دیگر با برچسب خاصِ تعریف شده اجرا گردد. در ادامه آموزشها، در رابطه با برچسبها توضیحات کاملتری در اختیار شما قرار خواهد گرفت.
برای تبدیل سناریوی متن آزاد9 به مراحل تست قابل پیادهسازی و خودکارسازی، چه راهکاری در Specflow وجود دارد؟
برای این منظور مقیدسازی10 تعریف شده است. مقیدسازیهای گوناگونی در SpecFlow تعریف شده است که مهمترین نوع آن، مقیدسازی گام11 است. در این نوع مقیدسازی هر خط از سناریو که یک گام نامیده میشود تبدیل به یک متد در کلاس مراحل Feature تولید شده، میگردد. استفاده از این نوع مقیدسازی به ما کمک میکند تا مراحل تکراری ما بین سناریوها را مورد استفاده مجدد قرار دهیم و به این ترتیب از فرآوردههای موجود بهترین استفاده را ببریم که منجر به صرف زمان کوتاهتری برای تولید خواهد شد. برای مقیدسازی، روی سناریو کلیک راست کنید و گزینه Generate Step Definition را انتخاب نمایید. مشابه با تصویر ۵ صفحهای باز خواهد شد که با امکان سه مدل Regular expression in attributes،Method name- underscores و Method name- pascal code مقیدسازی گام را انجام میدهد.
در ادامه آموزشها تفاوت این سه مدل مقیدسازی بیان خواهد شد. چنان چه دکمه Generate را بزنید، از شما خواسته میشود تا فایل تولید شده را با نام دلخواه ذخیره نمایید. پس از ایجاد فایل مشاهده خواهید نمود که مراحل سناریو که در ابندا به رنگ بنفش هستند(به این معنی که مقیدسازی انجام نشده است) به رنگ مشکی (به معنی اینکه فایل مقیدسازی تولید شده است) در میآیند. چنانچه فایل مراحل تولید شده را باز کنید، تصویری مشابه با تصویر ۶ مشاهده خواهید کرد.
همان طور که در تصویر مشاهده میشود، گامهای تولید شده دقیقا معادل با گامهای سناریو هستند. پیادهسازی معادل برای گامهای تست در حال حاضر وجود ندارد. بنابراین گامها در حالت Pending هستند. از این مرحله به بعد کار توسعهدهنده و تستر آغاز میشود. پیادهسازی کد تست و کد سیستم باید تواما پیش برود، تا کد سیستم تولید شده و تمامی تستهای تولید شده با موفقیت پشت سر گذاشته شوند.
در آموزش بعدی در ارتباط با سناریوها و گامهای تولید شده عمیقتر صحبت خواهیم کرد. ابتدا دانش بهتری در زمینه سناریوها و گامها کسب میکنیم و سپس به پیادهسازی گامها خواهیم پرداخت.
این آموزش به سفارش تیستن و به قلم سرکار خانم مهندس سیده مهسا میری آماده گردیده، و واحد آموزش تیستن نیز آنرا منتشر کرده است.
تمام قسمتهای آموزش Specflow، به صورت دستهبندی شده از اینجا در دسترس است.