جستجو برای:
سبد خرید 0
  • مطالب
  • تالار گفتگو
  • نمونه کارها
  • درباره ما
  • دوره آموزشیجدید
    • Css
    • تست در برنامه های دات نت
    • آشنایی با Canvas
  • تماس با ما
SarezCodes - سعید رضایی

ورود

گذرواژه خود را فراموش کرده اید؟

ثبت نام

داده های شخصی شما برای پشتیبانی از تجربه شما در این وب سایت، برای مدیریت دسترسی به حساب کاربری شما و برای اهداف دیگری که در سیاست حفظ حریم خصوصی ما شرح داده می شود مورد استفاده قرار می گیرد.

SarezCodes - سعید رضایی
  • مطالب
  • تالار گفتگو
  • نمونه کارها
  • درباره ما
  • دوره آموزشیجدید
    • Css
    • تست در برنامه های دات نت
    • آشنایی با Canvas
  • تماس با ما
ورود
0

وبلاگ

SarezCodes - سعید رضاییمحتوادوره آموزشیتست در برنامه های دات نتآزمون واحد در NET Core. با استفاده از xUnit

آزمون واحد در NET Core. با استفاده از xUnit

21 بهمن 1399
ارسال شده توسط سعید رضایی
برنامه نویسی، تست، تست در برنامه های دات نت، دوره آموزشی
717 بازدید
زمان مطالعه: 3 دقیقه

در مطالب قبلی در مورد انواع آزمون ها،ابزارهای موجود در دات نت برای اجرای آزمون ها و نحوه صحیح نوشتن آزمون ها صحبت شد.یکی از این ابزار xUnit می باشد که در این مطلب شما نحوه آزمون از طریق xUnit در NET Core.  را فرا خواهید گرفت.

این آموزش نحوه ساختن Solution حاوی پروژه آزمایش واحد و پروژه شامل کد را نشان می دهد.

ایجاد Solution

در این بخش سولوشنی ایجاد می شود که شامل پروژه های کد و آزمون است و دارای ساختار دایرکتوری زیر است:
/sample-unit-testing
    sample-unit-testing.sln
    /SampleService 
         SampleService.cs
         SampleService.csproj 
    /SampleService.Tests 
         SampleService_IsPrimeShould.cs 
         SampleServiceTests.csproj
  • برای شروع PowerShell را اجرا کنید.
  • دستور زیر را داخل PowerShell ,Bash و یا Cmd نوشته و اجرا کنید.
dotnet new sln -o sample-unit-testing
دستور dotnet new sln یک سولوشن جدید در  پوشه sample-unit-testing  ایجاد می کند.
  • با اجرای دستور cd sample-unit-testing به داخل پوشه ایجاد شده رفته و سپس دستور زیر را اجرا کنید
dotnet new classlib -o SampleService

این دستور یک پروژه از نوع Class Library در داخل پوشه SampleService ایجاد می کند که دارای یک کلاس پیشفرض به نام class1 می باشد.

  • class1 را به SampleService تغییر نام داده و کد زیر را با کد داخل آن جایگزین کنید :
using System;
namespace Sample.Services
{
   public class SampleService 
   {
      public bool IsTrue(int value) 
      {
        throw new NotImplementedException("Not implemented."); 
      } 
   } 
}

داخل تابع IsTrue  در سطر 8 یک Exception  از نوع NotImplementedException (به معنای اینکه کدی در داخل تابع نوشته نشده است) بر میگرداند، در ادامه این کد اپدیت خواهید شد.

 

  • برای افزودن پروژه SampleService  به سولوشن  sample-unit-testing از دستور زیر استفاده کنید:
dotnet sln add ./SampleService/SampleService.csproj
  • با اجرای دستور زیر پروژه SampleService.Tests را ایجاد کنید:
dotnet new xunit -o SampleService.Tests

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

  • “Microsoft.NET.Test.Sdk”
  • “xunit”
  • “xunit.runner.visualstudio”
  • برای افزودن پروژه تست به سولوشن از دستور زیر استفاده کنید :
dotnet sln add ./SampleService.Tests/SampleService.Tests.csproj
  • در ادامه با دستور زیر پروژه SampleService را به پروژه تست به عنوان dependency اضافه کنید:
dotnet add ./SampleService.Tests/SampleService.Tests.csproj reference ./SampleService/SampleService.csproj

ایجاد یک آزمون

یک روش محبوب در توسعه آزمون محور (TDD) نوشتن یک آزمون قبل از اجرای کد هدف است. “در این آموزش از روش TDD استفاده شده است.” تابع IsTrue قابل فراخوانی است ، اما قابل اجرا نمی باشد و نتیجه آزمایش تابع IsTrue ناموفق است. در روش TDD کد هدف برای پذیرفته شدن در آزمون ویرایش می شود و  شما مدام این روش را تکرار می کنید ، یک تست می نویسید اگر نتیجه تست نا موفق بود کد هدف را تا زمان اجرای موفق تست ویرایش می کنید.

ویرایش پروژه SampleTest

  1. فایل UnitTest1.cs را حذف کنید.
  2. فایل SampleService_IsTrueShould.cs را اضافه کنید.
  3. کد زیر را داخل فایل SampleService_IsTrueShould.cs بنویسید :
using Xunit; 
using Sample.Services; 
namespace Sample.UnitTests.Services 
{
   public class SampleService_IsTrueShould
   {
      [Fact] 
      public void IsTrue_InputIs1_ReturnFalse()
      {
         var sampleService = new SampleService();
         bool result = sampleService.IsTrue(1);
         Assert.False(result, "1 should not be true");
      } 
  }
}

صفت [Fact] ، تابع تست را به اجرا کننده آزمون معرفی میکند .

  • دستور dotnet test  را اجرا کنید، با اجرای این دستور هر دو پروژه کامپایل شده و سپس آزمون های پروژه آزمون اجرا می شوند.
  • همانطور که مشخص بود تست تابع IsTrue با مشکل رو برو می شود زیرا داخل تابع پیاده سازی نشده است
  • طبق قواعد TDD ساده ترین کدی را که می تواند منجر به اجرای صحیح آزمون شود به تابع IsTrue اضافه کنید.
  • تابع IsTrue را به صورت زیر بروز کنید.
public bool IsTrue(int value)
{
     if (value== 1)
     { 
       returnfalse;
     }
     thrownew NotImplementedException("Not fully implemented.");
}

اکنون با اجرای دستور  dotnet test ، تست قبول می شود.

تست با مقادیر مختلف

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

اما صفت های زیر در xUnit این امکان را فراهم می کنند که یک تابع تست با ورودی های مختلف بنویسید

  • [Theory] مجموعه ای از تست ها را نشان می دهد که همان کد را اجرا می کنند اما آرگومان های ورودی متفاوتی دارند.
  • [InlineData] مقادیری را برای ورودی ها مشخص می کند.

برای درک بهتر موضوع تغییرات زیر را  اضافه کنید :

1-در داخل کلاس SampleService  تابع زیر را اضافه کنید :

public bool IsNegativeNumber(int number)
{
   if (number >= 0)
   {
     return false;
   }
   throw new NotImplementedException("Not fully implemented.");
 }

2-کلاس تست جدید به نام SampleService_IsNegative به پروژه تست افزوده و کد داخل آن را به صورت زیر تغییر دهید :

using Xunit; 
using Sample.Services; 
namespace Sample.UnitTests.Services 
{
   public class SampleService_IsNegative
   {
      [Theory]
      [InlineData(2)]
      [InlineData(0)]
      [InlineData(1)] 
      public void IsNegative_ReturnTrue(int value)
      {
         var sampleService = new SampleService();
         bool result = sampleService.IsNegativeNumber(1);
         Assert.False(result, $"{value} should not be negative");
      }
  }

پروژه نمونه در مخزن گیت هاب

 

تست در برنامه های دات نت (مقدمه)
زمان مطالعه: 3 دقیقه
تست در برنامه های دات نت (مقدمه)
بهترین الگوهای آزمایش واحد در NET Core. و NET Standard. قسمت اول
زمان مطالعه: 6 دقیقه
بهترین الگوهای آزمایش واحد در  NET Core. و  NET Standard. قسمت اول
بهترین الگوهای آزمایش واحد در NET Core. و NET Standard. قسمت دوم
زمان مطالعه: 5 دقیقه
بهترین الگوهای آزمایش واحد در  NET Core. و  NET Standard. قسمت دوم
آزمون واحد در NET Core. با استفاده از NUnit
زمان مطالعه: 3 دقیقه
آزمون واحد در NET Core. با استفاده از NUnit
آزمون واحد در NET Core. با استفاده از MSTest
زمان مطالعه: 3 دقیقه
آزمون واحد در NET Core. با استفاده از MSTest
Print Friendly, PDF & Email
برچسب ها: unit testآزمایش واحدآزمون واحدتستتوسعه آزمون محور
قبلی جلسه چهارم : تاثیر منابع (link style and source order)
بعدی جلسه پنجم: Special Values - مقادیر خاص برای Property

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
برچسب‌ها
#C (3) css (12) css in depth (12) OOP (4) SOLID (5) unit test (4) آزمایش واحد (4) آزمون واحد (6) آموزشCSS (11) آموزش پایه ای (12) بازی ریاضی (4) بازی نویسی (2) برنامه نویسی (13) تست (5) توسعه آزمون محور (3) دات نت (1) ریاضی بازی (4) ریاضی در بازی (4) زبان برنامه نویسی (9) سی شارپ (3) شی گرایی (4) فناوری اطلاعات (3)
دسته‌ها
  • #C (6)
  • Css (13)
  • اصول طراحی (5)
  • بازی سازی (4)
  • بدون دسته بندی (3)
  • برنامه نویسی (20)
  • تست (7)
  • تست در برنامه های دات نت (6)
  • جاوا اسکریپت (1)
  • دوره آموزشی (19)
  • فناوری اطلاعات (5)
  • نگاه عمیق به سی شارپ (1)
نوشته‌های تازه
  • اصول طراحی SOLID در #C (قسمت آخر) 21 بهمن 1399
  • اصول طراحی SOLID در #C (قسمت چهارم) 21 بهمن 1399
  • اصول طراحی SOLID در #C (قسمت سوم) 21 بهمن 1399
  • اصول طراحی SOLID در #C (قسمت دوم) 21 بهمن 1399
  • اصول طراحی SOLID در #C (قسمت اول) 21 بهمن 1399
  • محبوب
  • جدید
  • دیدگاه ها
پشتیبانی

ما موضوع Sarez را نامگذاری کردیم، زیرا برای ما بهترین علامت های تجاری ساده هستند. رشد  برند ها در توانایی آنها درک می شود.

    2022© سارز کد SarezCodes
    اشتراک گذاری در شبکه های اجتماعی
    ارسال به ایمیل
    https://sarezcodes.ir/?p=2379
    • دسته بندی دوره ها
    • دوره های من
    • جستجو

    دسته بندی دوره ها

    دوره های من

    برای مشاهده خریدهای خود باید وارد حساب کاربری خود شوید

    جستجو

    مرورگر شما از HTML5 پشتیبانی نمی کند.