توسعه تست محور (TDD) در Visual Studio 2019

دوشنبه 11 اسفند 1399

در این مقاله ما به مفهوم توسعه تست محور (TDD) خواهیم پراخت. ما می‌بینیم که چطور می‌توانیم برای عملکردهای مختلفی که ایجاد می‌کنیم تست بنویسیم. در اینجا از ویژوال استودیوو 2019 به عنوان محیط توسعه استفاده می‌کنیم. یک کلاس ساده می‌سازیم و یکسری توابع را به آن اضافه می‌کنیم. سپس یکسری تست برای این توابع می‌نویسیم.

توسعه تست محور (TDD) در Visual Studio 2019

TDD چیست؟

شاید تعاریف زیادی را در مورد توسعه تست محور شنیده باشید. مفهوم اصلی آن نوشتن تست و پس از آن نوشتن کد واقعی است. گرچه این از نظر تئوری ایده خوبی است، اما به ندرت شاهد اجرای آن در دنیای واقعی هستیم. فرآیندی که بیشتر دیده می‌شود این است که در اکثر سناریوها ما کلاس‌ها و توابع خود را می‌نویسیم و پس از آن تست‌هایی را برای اطمینان از عملکرد صحیح کد می‌نویسیم. این امر همچنین از کد ما در برابر تغییرات آتی محافظت می‌‌کند، زیرا هر گونه شکست در برابر تغییراتی که ممکن است در جریان برنامه مشهود نباشد، هنگام نوشتن تست‌های مختلفی که نوشته‌اید، پیدا می‌‌شوند. در بخش بعدی نحوه نوشتن تست برای یک کلاس که دارای چند تابع است را می‌بینیم. مثال ما ساده است، اما می‌توان همین مفهوم را برای کلاس‌ها و توابع پیچیده اعمال کرد.

ایجاد یک سولوشن و افزودن تست به آن

بیاید شروع به ساخت یک برنامه NET core console. در ویژوال استودیو 2019 ویرایش Community کنیم. این یک نسخه رایگان از ویژوال استودیو است که دانلود آن برای همه در دسترس است.

تصویر زیر، زیرساخت پروژه‌ای است که ساخته‌ایم.

سپس یک کلاس جدید به پروژه موجود اضافه می‌کنیم.

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


    namespace ConsoleAppTDD {  
        public class MathCalculator {  
            public int AddValues(int valueA, int valueB) {  
                return valueA + valueB;  
            }  
            public int SubtractValues(int valueA, int valueB) {  
                return valueA - valueB;  
            }  
            public int MultiplyValues(int valueA, int valueB) {  
                return valueA * valueB;  
            }  
        }  
    }  

حالا ما یک کلاس و چند تا تابع افزوده شده به آن داریم. سپس یک پروژه Test می‌سازیم و تست‌ها را برای این توابع می‌گذاریم.

سولوشن را انتخاب کرده، کلیک راست می‌کنیم، Add و بعد new project را انتخاب می‌کنیم. “tests” را در باکس جستجو می‌نویسیم و همانند زیر " MSTest Test Project (.NET Core)" را انتخاب می‌کنیم.

به پروژه اصلی یک رفرنس اضافه می‌کنیم.

حالا، کد زیر را به کلاس ساخته شده اضافه می‌کنیم.


    using Microsoft.VisualStudio.TestTools.UnitTesting;  
    namespace ConsoleAppTDD.Tests {  
        [TestClass]  
        public class UnitTest1 {  
            Math Calculator mc;  
            public UnitTest1() {  
                mc = new MathCalculator();  
            }  
            // Standard Tests  
            [TestMethod]  
            public void AddValues_Test() {  
                    int val = mc.AddValues(10, 20);  
                    Assert.AreEqual(val, 30);  
                }  
                [TestMethod]  
            public void SubtractValues_Test() {  
                    int val = mc.SubtractValues(10, 20);  
                    Assert.AreEqual(val, -10);  
                }  
                [TestMethod]  
            public void MultiplyValues_Test() {  
                int val = mc.MultiplyValues(10, 20);  
                Assert.AreEqual(val, 200);  
            }  
        }  
    }  

اکنون بیایید Test Explorer را به صورت زیر اضافه کنیم.

سپس بر روی Unit tests در Test explorer کلیک راست کرده و " Run Tests" را کلیک می‌کنیم. در زیر می‌بینیم همه کارها خوب است.

اگر برخی از کدها را که به درستی انجام نشده است را تغییر دهیم، تست مربوطه با شکست مواجه می‌‌شود.

علاوه بر این با اجرای تست‌ها، ما همچنین می‌توانیم تست‌ها را همانند زیر دیباگ کنیم.

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

نتیجه‌گیری

در این مقاله به طور سریع مفهوم توسعه تست محور را، که به عنوان TDD نیز شناخته می‌شود، بررسی کردیم. ما دیدیم چطور می‌توانیم تست‌ها را به کلاس‌ها و توابع اضافه کنیم. افزودن تست‌ها مرحله مهم هر وظیفه توسعه‌ای است و هنگام برنامه‌ریزی برای هر فعالیت مربوط به کد باید در نظر گرفته شود. این تست‌ها می‌توانند به صورت دستی اجرا شوند و همچنین بخشی از فرآیند DevOps ساخته شده است تا اطمینان حاصل شود که همه تست‌ها قبل از شروع هر استقرار (deploy) جدیدی پاس شوند.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید