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

یک جز کوچک در این حالت که می‌تواند تابعی از هر ویژگی یا هر کلاس باشد که کارکرد خاص را کنترل می‌کند.

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

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

  1. موارد تست واحد نشان می‌دهند که آیا هر چیزی در طراحی نرم‌افزار، قابلیت نرم‌افزار را دارد  و در صورتی که مطابق با الزامات مورد انتظار عمل نمی‌کند، اشتباه است.
  2. با توجه به کمک دستگاه تست، ما می‌توانیم قبل از استقرار کد به محیط دیگر و دیباگ آن، اشکالات یا مسایل را زودتر به دست آوریم.
  3. عمدتاً ما از رویکرد TDD در حین اجرای آزمایش واحد پیروی خواهیم کرد. و این تست واحد به ما کمک می‌کند تا الزامات را درک کرده و در مورد پیچیدگی فکر کنیم تا بتوانیم کد واقعی توسعه نرم‌افزار را بنویسیم. بنابراین، واحد تست به ما یک ایده می‌دهد و یا فرصتی برای فکر کردن در مورد اجرای واقعی الزامات در زمان نوشتن موارد تست به ما می‌دهد.
  4. افزودن واحد تست بخشی از چرخه ی توسعه ی نرم افزار شماست که فرآیند را برای شما می سازد حالا اگر هر کدی که شما از قبل داشته باشید و یا توسط توسعه دهنده ی قبلی نوشته شده باشد آنگاه واحد تست آن راچک می کند که ببیند کد با شکست مواجه می شود یا نه؟
  5. تست واحد به ما کمک می‌کند که باگ ها را زودتر کاهش دهیم. اگر یک توسعه دهنده الزامات را به طور واضح و براساس آن درک کرده باشد، اگر او برای اجرای الزامات همراه با موارد تست، کد را می‌نویسد، پس احتمالاً می‌تواند بیشتر باگ ها را در زمان توسعه ثبت وتغییر کند.
  6. تست واحد به توسعه دهندگان دیگر کمک می‌کند تا عملکرد واقعی، در مورد اجزای واحد که در سیستم موجود هستند و نحوه کار آن‌ها را درک کنند.

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

مزایا و معایب xUnit :

  1. این کار طول مدت تکمیل پروژه را افزایش می‌دهد زیرا نوشتن واحد تست به همراه اجرای الزامات حقیقی زمان اضافی را می‌طلبد.
  2. این کار هزینه ی پروژه را زیاد می کند چون نوشتن واحد تست از توسعه دهندگان این واحد زمان زیادی را می برد و در نتیجه برق بیشتری را مصرف می کند و مصرف برق بیشتر در نتیجه هزینه ای بیشتری را در بر دارد
  3.  ما می توانیم موارد آزمون واحد را بنویسیم که در آن الزامات واضح نیستند یا خیلی زود تغییر می کند یا باید صبر کنیم که الزامات تغییر نکند یا اینکه الزامات ثابت بمانند
  4. پوشش کد ۱۰۰ % نیست چون در هر سناریو، ما نمی‌توانیم موارد تست واحد را برای همه ی موارد بنویسیم. به عنوان مثال، اگر یک الگوریتم داشته باشید که براساس اطلاعات تغییر ‌کند.
  5. نوشتن تست واحد و نگه داری آن خود یک مشکل است
  6. تست واحد نمی‌تواند تمام باگ ها را بگیرد. بسیاری از اشکالات موجود در سیستم پس از تست واحد وجود دارد که می‌تواند در تست یکپارچگی یا پایان آزمایش به دست آید.

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

  • موارد تست واحد را در یک پروژه بنویسید، یک پروژه آزمایشی جداگانه برای تست واحد ایجاد کنید.
  • موارد تست واحد باید به خوبی سازماندهی شوند.
  • نوشتن موارد تست واحد برای کارکرد کوچک
  • اگر یک تابع تعداد زیادی از عملیات‌ها را انجام می‌دهد، آنگاه فقط یک مورد آزمون واحد برای هر تابع جداگانه بنویسید.
  • موارد تست واحد را ننویسید چون به تست واحد های قبلی وابسته است.
  • نام واحد توضیح آزمون باید توضیحی برای خودش داشته باشد.
  • موارد تست واحد باید همیشه مستقل باشد.
  • عملکرد تست واحد باید همیشه سریع باشد.

در خط پایین یک مثال را زدیم به صورت زیر:

ابتدا یک پروژه از نوع ASP.NET Core Console Application با استفاده از نرم افزار visual 2017 ایجاد می کنیم تا یک پروژه تست با xUnit بنویسم.

زمانی که پروژه آماده است یک کلاس به نام ” MathOperation.cs ” که در این کلاس برخی از عملیات ریاضی انجام می شود و به صورت زیر خواهیم نوشت:


namespace UnitTestingDemo  
{  
    public static class MathOperation  
    {          
        public static double Add(double number1, double number2)  
        {             
            return (number1 + number2);  
        }  
  
        public static double Subtract(double number1, double number2)  
        {  
            return (number1 - number2);  
        }  
  
        public static double Multiply(double number1, double number2)  
        {  
            return (number1 * number2);  
        }  
  
        public static double Divide(double number1, double number2)  
        {  
            return (number1 / number2);  
        }  
    }  
}  


در کلاس بالا چهار عملیات ریاضی وجود دارد که دو مقدار ورودی و خروجی را می گیرد و مقدار ها را بر می گرداند.

حالا ما یک پروژه ی دیگر برای تست واحد ایجاد می کنیم روی solution پروژه راست کلیک کرده و گزینه ی add را می زنید و نام پروژه را انتخاب می کنید و بعد از آن ok را انتخاب می کنیم.

xUnit.net این یک منبع باز از سورس است و یک ابزار برای آزمایش کد استفاده می شود و برای چهار چوب .net از آن استفاده می شود.

ما یک پروژه ی آماده برای تست داریم اجازه دهید Reference پروژه را در بیاوریم تا بتوانیم از متد های کلاس بالا که برای ۴ عملیات ریاضی  نوشتیم استفاده کنیم.

برای اضافه کردن Reference ، روی Interface پروژه کلیک راست کرده و بر روی “Add Reference” کلیک کنید.

این کار یک پنجره برای شما باز می کند که با استفاده از آن می توانید dll خود را به آن اضافه نمایید بنابر این با یک کلیک راست کردن و انتخاب پروژه اصلی و زدن OK پروژه ی شما اضافه می شود.

xUnit

xUnit

حالا داخل پروژه ی خود یک کلاس به نام “MathOperationTest.cs” ایجاد نمایید و آزمون تست را برای متد های کلاس MathOperation.cs بنویسید.

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

در زیر کلاسی به نام MathOperationTest وجود دارد که ما موارد تست را اجرا کرده ایم.

using UnitTestingDemo;  
using Xunit;  
  
namespace XUnitTestDemo  
{  
    public class MathOperationTest  
    {  
        [Fact]  
        public void Task_Add_TwoNumber()  
        {  
            // Arrange  
            var num1 = 2.9;  
            var num2 = 3.1;  
            var expectedValue = 6;  
  
            // Act  
            var sum = MathOperation.Add(num1, num2);  
  
            //Assert  
            Assert.Equal(expectedValue, sum, 1);  
        }  
  
        [Fact]  
        public void Task_Subtract_TwoNumber()  
        {  
            // Arrange  
            var num1 = 2.9;  
            var num2 = 3.1;  
            var expectedValue = -0.2;  
  
            // Act  
            var sub = MathOperation.Subtract(num1, num2);  
  
            //Assert  
            Assert.Equal(expectedValue, sub, 1);  
        }  
  
        [Fact]  
        public void Task_Multiply_TwoNumber()  
        {  
            // Arrange  
            var num1 = 2.9;  
            var num2 = 3.1;  
            var expectedValue = 8.99;  
  
            // Act  
            var mult = MathOperation.Multiply(num1, num2);  
  
            //Assert  
            Assert.Equal(expectedValue, mult, 2);  
        }  
  
        [Fact]  
        public void Task_Divide_TwoNumber()  
        {  
            // Arrange  
            var num1 = 2.9;  
            var num2 = 3.1;  
            var expectedValue = 0.94; //Rounded value  
  
            // Act  
            var div = MathOperation.Divide(num1, num2);  
  
            //Assert  
            Assert.Equal(expectedValue, div, 2);  
        }  
    }  
}  


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

شما می توانید این آزمون را در IE هم چک کنید بر اساس همان شما می توانید متوجه شوید که آزمون شما چقدر پیچیده است یا نه و زمانی که آزمون با موفقیت اجرا می شود به صورت زیر خواهد بود.

xUnit

xUnit

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

زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.