شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز شروع دوره پایتون از پنجشنبه 1 خرداد ، مقدماتی تا پیشرفته، بدون پیش نیاز
🎯 ثبت نام

توسعه بر اساس تست در NET-آموزش Test Driven Design در NET.

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

clip_image001[4]توسعه بر اساس تست در .NET

توسعه بر اساس تست (Test-Driven Development:TDD)، رویکردی است برای توسعه نرم افزار که به ما می گوید باید قبل از نوشتن هر سطر از کد، آن را تست کنیم. با وجود این رویکرد مجبور خواهیم بود درباره نیازمندی ها و چگونگی اعتبار بخشی به کدهای متضاد، فکر کنیم. علاوه بر این باعث خوانایی کد خواهد شد. اگر کدها را بدون تست بنویسیم، قطعاً یکسری باگ تولید می کند و ما مجبور خواهیم شد حتماً برای اصلاح آن ها، به کد مراجعه کنیم.

براساس این جمله که "TDD ربطی به تست گرفتن ندارد"، TDD یک روش برای ساخت نرم افزار، با تمام کارایی های است که واقعاً نیاز دارد، نه با چیزی که یک برنامه نویس احتمال می دهد داشته باشد.

در ابتدا ممکن است امری متضاد به نظر برسد، اما نه تنها بی معنا نیست، بلکه به سرعت تبدیل به یک روش طبیعی و ظریف برای توسعه نرم افزار خواهد شد.

توسعه بر اساس تست، پیرامون یک چرخه کوتاه تکرار شونده توسعه می گردد. می توان آن در چهار مرحله اساسی خلاصه کرد:

برای کدهای بعدی تست بنویسید. باید تمام ترکیب های ورودی و خروجی را در نظر بگیرید.

هر بار که کد تان را می نویسید باید تست را اجرا کنید و تا زمانی که تست نوشته شده را پاس کند، این کار را تکرار کنید.

حالا باید از کد فاکتورگیری (refactor) کنیم تا عملکرد و خوانایی آن را بالا ببریم. پس از فاکتور گیری، باید برای اطمینان از صحت کد، یکبار دیگر تست را اجرا کنیم.

این مراحل را تا زمانی که نیاز است تکرار کنید.

حالا می توانیم بگوئیم TDD چیزی است که کد ما نیاز دارد نه چیزی که هست. (TDD به خودی خود چیزی نیست و درواقع یک نیاز برای برنامه ما است.) TDD اجازه می دهد تا پس از اعمال هرگونه تغییر در عملکرد برنامه و یا تعریف یک تابع جدید، با سرعت و کارایی بیشتری سیستم را تست کنیم. TDD به برنامه نویس اجازه می دهد تا با هدف پاس کردن تست، بر روی کار خود متمرکز شود.

Visual Studio با بهره گیری از فریم ورک تست واحد (unit testing framework) از مفهوم TDD پشتیبانی می کند. اجازه دهید برای نشان دادن این موضوع، یک کتابخانه کلاسی تحت ویندوز ایجاد می کنیم تا یکسری عملیات ریاضی مانند جمع و تفریق را انجام دهد. به همین منظور، یک solution ایجاد کنید و یک Class library به نام LibTDD به آن اضافه کنید. حالا باید یک پروژه تست واحد را به فایل solution بیفزائیم. با این کار، مانند شکل زیر،  یک فایل کلاسی در پروژه تست واحد خواهیم داشت:

using System; 

using Microsoft.VisualStudio.TestTools.UnitTesting; 

namespace UnitTest  

    [TestClass] 

    public class UnitTest1  

    { 

        [TestMethod] 

        public void TestMethod1() {} 

    } 




پروژه تست واحد

همانطور که مشاهده می کنید، هر کلاس تست، دارای یک ویژگی [TestClass] و هر متد تست هم یک ویژگی [TestMethod] دارد. خروجی متدهای تست void هستند و هیچ پارامتری را به عنوان ورودی قبول نمی کند.

حالا یک کلاس در پروژه به نام clsMath با متد Add اضافه می کنیم.

public class clsMath  

    public int Add(int a, int b)  

    { 

        throw new NotImplementedException(); 

    } 

}

And modified the test method as:

[TestClass] 

public class UnitTest1  

    [TestMethod] 

    public void TestMethod1()  

    { 

        clsMath objMath = new clsMath(); 

        objMath.Add(10, 15); 

    } 

}

حالا تست را اجرا کنید. برای اجرای تست می توانید از طریق منو به شکل زیر عمل کنید:




اجرای تست

و یا اینکه از طریق test explorer (Test>Windows>Test Explorer) این کار را انجام دهید. از آنجایی که هنوز هیچ تابعی پیاده سازی نشده است، تست با شکست مواجه می شود.


Test Explorer

 

حالا متد Add را به شکل زیر تغییر می دهیم:

public int Add(int a , int b) 

   return a + b; 

}

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


اجرای مجدد تست

 

حالا یک متد دیگر در پروژه اصلی اضافه می کنیم.

public int Division(int a, int b) 

   return a/b; 

}

و دو متد تست دیگر هم به پروژه تست اضافه می کنیم:

[TestMethod] 

public void TestDivision1()  

    clsMath objMath = new clsMath(); 

    objMath.Division(75, 15); 

[TestMethod] 

public void TestDivision2()  

    clsMath objMath = new clsMath(); 

    objMath.Division(10, 0); 

}

حالا اگر تست را اجرا کنیم، TestDivision2 با اعلام استثناء DivideByZeroException، با شکست مواجه می شود.



Test Division1

هم می توانیم با اضافه کردن یک ویژگی جدید به متد تست، مانند زیر، تست را پاس کنیم:

[ExpectedException(typeof(DivideByZeroException))]

یا با یک بلوک try-catch در متد Division این کار را انجام دهیم.

حالا با اعمال تغییرات، متد تست به شکل زیر خواهد بود:

 [TestMethod] 

[ExpectedException(typeof(DivideByZeroException))] 

public void TestDivision2() 

    clsMath objMath = new clsMath(); 

    objMath.Division(10, 0); 

}

 

Test Division2

 

1394/09/04 3193 1092
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...