.NET Uzbekistan
  • .NET Uzbekistan
  • C# / .NET
    • .NET ga xush kelibsiz
    • .NET bilan bog'liq mavhumliklardan qochish
    • .NET asoslari
      • MSIL
      • Memory Management
        • Stack & Heap
      • CLR
    • Basics
      • Starter (boshlang'ich)
        • Java vs C#
        • C# Tarixi
        • Kirish
        • Visual Studio 2019
        • O'zgaruvchilar
        • Ma'lumot turlari
        • Operatorlar
        • Kalit so'zlar
        • ReadLine
        • If-else
        • Switch
        • Math sinfi
        • For sikl operatori
        • While sikl operatori
        • Do-While sikl operatori
        • Foreach sikl operatori
        • Break
        • Continue
        • Goto
        • Kommentlar
      • Essential (muhim)
        • Funksiya
        • Funksiyani qiymat orqali chaqirish
        • Funksiyada Ref kalit so'zidan foydalanish
        • Funksiyada Out parametri
        • Massiv
        • Funksiyalarda massivdan foydalanish
        • Ko'p o'lchamli massiv
        • Parametrlar
        • Array sinfi
        • CMD argumentlari
        • Obyekt va Class lar
        • Konstruktor
        • Obyektni ishga tushiruvchilar
        • Destructor
        • this
        • static
        • Struct
        • Enum
        • Property va Field lar
        • Vorislik
        • Overload (Qayta yuklash)
        • Override (Qayta yozish)
        • Base
        • Polimorfizm
        • Sealed
        • Interface
        • Modifikatorlarga ruxsat berish
        • Inkapsulatsiya
        • Abstrakt class va funksiyalar
        • String
        • StringBuilder
        • String Intern Pool
        • Exception Handling
        • try/catch
        • finally
      • Professional
        • To'plamlar
          • List
          • ArrayList
          • LinkedList
          • SortedList
          • Dictionary
          • HashTable
          • Stack
          • Queue
        • Tuple
        • ValueTuple
        • Delegatlar
          • Func delegati
          • Action delegati
          • Predicate delegati
          • Anonim metodlar
        • Hodisalar
        • Extension metodlar
        • Stream I/O
          • StreamWriter
          • StreamReader
          • MemoryStream
        • File va Directory
          • FileInfo
          • DirectoryInfo
        • MultiThread va Parallel dasturlash
        • Asinxron dasturlash
        • XML Document bilan ishlash
    • LINQ asoslari
      • Average
      • LINQ qanday ishlaydi?
      • LINQ query yozish usullari
      • IEnumerable va IQuerable
      • LINQ operatorlari
      • Select
      • SelectMany
      • Filterlash operatorlari
      • Where
      • OfType
      • Saralash operatorlari
      • OrderBy va OrderByDescending
      • ThenBy va ThenByDescending
      • Reverse
      • Miqdor operatorlari
        • All
        • Any
        • Contains
        • Min
        • Max
      • Set operatsiyasi
        • Distinct
        • Except
        • Intersect
        • Union
      • Bo'lim operatorlari
        • Take
        • TakeWhile
        • Skip
        • SkipWhile
      • Join operatorlari
        • Inner Join
        • Group Join
        • Left Join
      • Element operatsiyalari
        • ElementAt
        • First va FirstOrDefault
        • Last va LastOrDefault
        • Single va SingleOrDefault
    • ORM
      • ADO.NET
      • Dapper
      • Entity Framework
        • Entity Framework Approaches(usullar)
          • Model First Approach
          • Database First Approach
          • Code First Approach
        • Query yozish usullari(Entity Framework)
          • LINQ to SQL
          • Entity SQL
          • Native SQL
        • Entity Framework Core
    • Qo'shimcha sinflar
      • System.Text
        • Encoding
      • System
        • Int32
        • Random
        • DateTime
        • TimeSpan
      • System.Reflection
    • .NET Dasturchi
      • Clean Arxitektura
        • Clean Kod
        • Dizayn Tamoyillari
          • SOLID
            • Yagona Mas'uliyat Tamoyili(SRP)
            • Ochiq Yopiq Tamoyili(O/CP)
            • Liskovning Almashtirish Tamoyili(LSP)
            • Interfeysga ajratish tamoyili(ISP)
            • Qaramlik Inversiya Tamoyili(DIP)
          • DRY
          • KISS
          • YAGNI
        • Dizayn Patternlar
          • Factory Method
          • Abstract Factory
          • Builder
          • Prototype
          • Singleton
          • Adapter
          • Bridge
          • Composite
          • Decorator
          • Façade
          • Flyweight
          • Proxy
          • Chain of Responsibility
          • Command
          • Interpreter
          • Iterator
          • Mediator
          • Memento
          • Observer
          • State
          • Strategy
          • Visitor
          • Template Method
      • Git / Github
      • Muhim terminlar
      • Postman
      • CLI
        • CMD savodxonligi
      • API dan foydalanish
      • WCF
      • Refactor .NET application
      • Unit Test
      • TDD
      • TFS
    • Desktop Dasturlash
      • WPF (Windows Presentation Foundation)
        • WPF ga kirish
          • WPF ning ustunliklari
          • WPF da dastur
          • WPF arxitetkturasi
          • Klasslar iorarxiyasi
        • XAML
          • XAML asoslari
          • XAML orqasida kod
          • XAML xususiyatlari
          • XAML belgilash kengaytmalari
          • Biriktirilgan xususiyatlar
          • XAML da hodisalar
          • XAML da nomlar fazosi
        • WPF ilovasini tuzish
          • Komponovka
          • StackPanel
          • WrapPanel
          • DockPanel
          • Grid
          • GridSplitter
          • Umumiy o'lchamli guruhlar
          • Canvas
          • LnkCanvas
          • Komponovkaga misollar
        • Bog'liqlik xususiyatlari (Dependency property)
          • Bog'liqlik xususiyatlari
          • Bog'liqlik xususiyatlarining roli
          • Bog'liqlik xususiyatlarining aniqlanishi
          • Bog'liqlik xususiyatlarini ishlatish
        • Marshrutlangan hodisalar (Routed Events)
          • Routed Events
          • Bubble Events
          • Direct Events
          • Tunneling Events
        • Qo'shimcha ma'lumotlar
          • WPF ga kirish
          • WinForm va WPF
          • Salom WPF
          • XAML nima?
          • Hodisalar
          • WPF oynasi
          • App.xaml
          • Resurslar
          • Argument berish
          • Son va Vaqtni Formatlash
          • TextBlock elementi – Inline formatlash
          • Label elementi
          • Textbox elementi
      • WinForm (Windows Form)
        • 1-dars. Forma yaratish
        • 2-dars. Muhit bilan tanishish
        • 3-dars. Formaga komponentalar joylashtirish
        • 4-dars. Xodisa(Event)larni boshqarish
        • 5-dars. Dasturni ishga tushurish
      • UWP (Universal Windows Platform)
      • Xamarin
    • Web Dasturlash
      • ASP.NET Core asoslari
        • ASP.NET Core haqida
        • Loyihalar turlari
        • ASP.NET Core dasturlarini hosting qilish
        • Middleware tushunchasi
        • Middleware bilan amaliyot
        • Statik fayllar bilan ishlash
        • Dependency Injection
        • Developer Exception Page
      • ASP.NET Core Web API
        • Web API ga kirish
        • Swagger nima?
        • Http metodlar
        • ActionResult
        • CORs
        • Security (JWT)
        • Swagger ni sozlash
        • Filter va atributlar
        • Configuration va middleware
        • Logging
        • Mapping (AutoMapper)
        • SignalR
        • Keshlash
      • ASP.NET Core MVC
        • MVC nima?
        • ASP.NET Core MVC haqida qisqacha
        • Loyiha strukturasi
        • Controller
        • View
        • Model
        • View larni aniqlash yo'llari
        • Controller dan view ga ma'lumot uzatish
        • ViewBag va ViewData
        • Strongly typed View
        • Layout view haqida
        • ViewStart va ViewImports fayllari haqida
        • Marshrutizatsiya (routing)
        • Tag Helpers
          • Anchor Tag Helper
          • Image Tag Helper
          • Environment Tag Helper
        • Tekshiruv qoidalari (Validation rules)
      • MicroServices
    • Mobile Dasturlash
      • Xamarin.Android
      • Xamarin.IOS
      • Xamarin.Forms
    • Game Dasturlash
      • Unity Starter (boshlang'ich)
      • Unity Advanced (rivojlangan)
    • Internet of Things
    • Machine Learning
    • Telegram Bot
      • Kirish
        • Telegram bot bilan tanishuv
        • ASP.NET Core da birinchi telegram bot
      • Starter
        • Xabar turlari va xabar yuborish
          • Matnli xabarlar bilan ishlash
          • Rasm & Sticker
          • Audio & voice
          • Video & Video Note
          • Dokument fayllar
          • Polls
          • Contact , Location, Venue
          • Album(Media Group)
      • Essential
        • Reply - Markup
          • ReplyKeyboardMarkup, KeyboardButton
          • InlineKeyboardMarkup, InlineKeyboardButton
      • Advanced
        • Deployment
    • Class Library
    • Intervyu savollari
      • C# / .NET asoslari
  • Database
    • MS SQL Server
      • SQL Server sintaksisi
      • Ma'lumot turlari
      • Select
    • PostgreSQL
      • Basic
        • Kirish
        • PostgreSQL tarixi
        • Muhitni sozlash (PgAdmin)
        • Sistaksis
        • Ma'lumot turlari
        • Create Database
        • Select Database
        • Drop Database
        • Create Table
        • Drop Table
        • Scheme
        • Insert so'rovi
        • Select so'rovi
        • Operatorlar
        • Ifodalar
        • Where
        • Where
        • And va Or
        • Update so'rovi
        • Delete so'rovi
        • Like
        • Limit
        • Order By
        • With
        • Having
        • Distinct
      • Advance
        • Constraint (cheklov) lar
        • Join lar
          • Cross join
          • Inner join
          • Left join
          • Right join
          • Full join
        • Union
  • Roadmap
    • Roadmap for .NET developers
    • Roadmap for Azure developers
Powered by GitBook
On this page
  • Unit Testlar nega kerak?
  • Unit Testlar qanday yoziladi?
  • Best Practicelar
  • 1. Alohida ajratilgan testlar yozish
  • 2. Ma’noli nomlar berish
  • 3. Test freymvorklar ishlatish
  • 4. Mock va Stub’lar ishlatish
  • 5. Hamma holatlarni testlash
  • 6. Readable test yozish

Was this helpful?

  1. C# / .NET
  2. .NET Dasturchi

Unit Test

Wahid Abduhakimov

Unit testlar yuqori sifatli .NET dasturlar yaratishning ajralmas qismi. Unit Test bu dasturni eng kichik komponentlarini ajratib olgan olda ularni to’g’ri ishlashini tekshirish. Bu komponentchalar odatda juda kichik va mustaqil bo’ladi. Ular birgalikda katta dasturni tashkil qiladi. Ushbu kichik komponent va qismlarni ajratib olib test qilish orqali ulardagi hatoliklar juda erta aniqlanadi va bu o’z navbatida katta vaqt va pul tejalishiga olib keladi.

Ushbu maqolada .NET dasturlar uchun unit testing asoslarini, unit testlarni qanday va nega yozilishi kerak ekanini o’rganamiz.

Unit Testlar nega kerak?

Unit test juda ham muhim chunki ular defetlarni development siklining erta boshqichlarida aniqlashga yordam beradi. Unit test yozish orqali komponentdagi xatolarni bu komponentlar sistemani boshqa qismlariga ulanishidan oldin aniqlash mumkin. Bu juda ham katta vaqt va mablag’ tejaydi, sababi xatolarni komponentlar sistemaning boshqa qismlariga integratsiya qilinishdan avval aniqlash va tuzatish ancha osonroq.

Bundan tashqari unit testlar kodni modular bo’lishini ta’minlaydi. Kodni kichik komponentlarda mustaqil shaklda yozish uni keyinchalik kengaytirish va yangi featurelar osonlikcha qo’shish imkonini beradi.

Unit Testlar qanday yoziladi?

.NETda unit testlar MSTest, NUnit yoki xUnit kabi test freymvorklar orqali yoziladi tushiriladi. Ushbu freymvorklar unit testlar yozish va ishga tushirish uchun kerakli toollar bilan ta’minlaydi.

Unit Test yozish quyidagi qadamlardan iborat:

  1. Test qilayotgan kodingiz mohiyatini tushinish: Unit Test yozishdan avval siz testlayotgan method, funksiya yoki klas aynan qanday ishlashi kerakligini avval bilishingiz kerak. Kod qanday ishlashi, input va outputlar haqida to’liq ma’lumotga ega bo’lishingiz kerak.

  2. Testni yozish: Nimani testlashni aniqlashtirib olgandan keyin test yozishni boshlasangiz bo’ladi. Unit Test odatda 3 qismdan iborat bo’ladi: Tartiblash, Harakat, Tasdiqlash (Arrange, Act, Assert).

    1. Tartiblash qismida test uchun kerak bo’ladigan obyekt va ma’lumotlar tayyorlanadi.

    2. Harakat qismida esa test qilinayotgan funksiya yoki method chaqiriladi. Ya’ni test qilinayotgan kod ishga tushiriladi.

    3. Tekshirish qismida olingan natija kutilgan natijaga to’g’ri kelish kelmasligi tekshiriladi.

Quyidagi xUnit freymvork orqali kichik unit test misoli keltirilgan:

using Xunit;

public class CalculatorTests
{
    [Fact]
    public void Add_WithPositiveNumbers_ReturnsCorrectSum()
    {
        // Arrange
        var calculator = new Calculator();
        int a = 2;
        int b = 3;
        
        // Act
        int result = calculator.Add(a, b);
        
        // Assert
        Assert.Equal(5, result);
    }
}

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

Yuqoridagi Caculator klasining bitta Add methodi bor. U ikkita son qabul qiladi va ularni yig’inidisini qaytaradi. Shu klasga yozilgan unit testni yuqorida ko’rishingiz mumkin.

Add_WithPositiveNumbers_ReturnsCorrectSum degan methodga ega CalculatorTests klasini yaratamiz. Arrange qismida Calculator klasidan obyekt yaratib olamiz. Keyin esa a va b inputlarni tayyorlaymiz. Act qismida Add methodini chaqirimiz. Natijani Assert qismida biz kutganday 5 ga teng ekanini tekshiramiz.

💡 Test method ekanini anglatib turuvchi `[Fact]` atribyutiga e’tibor bering.

Best Practicelar

1. Alohida ajratilgan testlar yozish

Har bir unit test faqatgina bitta funksiyani testlashi kerak. Testlash jarayonida sistemaning testlanayotgan qismidan boshqa qismiga bog’liq bo’lmasligi shart. Bu testlarni izolatsiya qilishga va hatolarni tezroq topishga yordam beradi.

2. Ma’noli nomlar berish

Test klaslar va metodlarga ma’noli nomlar berish kerak. Bu orqali kod tushinarliroq bo’ladi va boshqa dasturchilar test ichida bemalolroq navigatsiya qilishadi.

3. Test freymvorklar ishlatish

Unit Testlar yozish va ularni ishga tushirish uchun MSTest, xUnit va NUnit kabi freymvorklardan foydalaning. Ushbu freymvorklar test yozish va uni ishga tushirishga kerakli qurilmalar bilan ta’minlaydi. Bunday tashqari ular test natijalari haqida reportlar va kodning qancha qismi testlar bilan qoplanganini ko’rsatib turadi.

4. Mock va Stub’lar ishlatish

Stub va mocklar orqali testlanayotgan kodni izolatsiya qilish va boshqa dependency larni simulatsiya qilish mumkin. Buning yordamida faqatgina testlanayotgan qism haqida qayg’urib boshqa dependencylarni shunchaki simulatsiya qilinadi.

5. Hamma holatlarni testlash

Kodning har yo’lini testlashga harakat qiling. Bunga xato chiqishi mumkin bo’lgan barcha holatlar, edge case’lar va inputning barcha possible variantlari kiradi.

6. Readable test yozish

Siz yozgan boshqalar uchun ham tushinarli bo’lishi uchun nomlashga va tushinarsiz qismlarga koment yozib chiqishga e’tibor bering. Teslanayotgan funksiya va testdan kutilayotgan natija nima ekani testni o’qiganda aniq bo’lishi kerak.

Hulosa qilib aytganda zomaniy dasturlarni yaratilish jarayonini Unit Testlarsiz tasavvur qilib bo’lmaydi. Har bir .NET dasturchi o’zining toolsetiga Unit Testing ko’nikmalarini qo’shib qo’yishi uning sifatli kod yozishiga yordam beradi.

PreviousRefactor .NET applicationNextTDD

Last updated 2 years ago

Was this helpful?