C# में परीक्षण: यूनिट, इंटीग्रेशन, E2E — .NET के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# में परीक्षण: Unit से E2E तक — .NET में गुणवत्तापूर्ण जाँच आर्किटेक्चर कैसे बनाएँ



सॉफ्टवेयर की गुणवत्ता सीधे परीक्षण प्रणाली पर निर्भर करती है। C# और .NET इकोसिस्टम में परीक्षण का एक स्थापित पिरामिड है: मॉड्यूलर (यूनिट), एकीकरण (इंटीग्रेशन) और एंड-टू-एंड (E2E) परीक्षण। इस लेख में हम व्यावहारिक उदाहरणों के साथ प्रत्येक स्तर को समझेंगे, दिखाएंगे कि किन लाइब्रेरी का उपयोग करना है, और तैयार कोड टेम्पलेट देंगे।



1. यूनिट-टेस्टिंग: कोड स्थिरता का आधार



यूनिट-टेस्ट बाहरी निर्भरताओं (DB, API, फ़ाइल सिस्टम) से अलग करके अलग-अलग मेथड, क्लास या कम्पोनेंट के काम की जाँच करते हैं। मुख्य उद्देश्य रिफैक्टरिंग के दौरान रिग्रेशन को जल्दी खोजना है।



C# के लिए उपकरण

  • NUnit — [Test], [TestCase] एट्रीब्यूट वाला क्लासिक फ्रेमवर्क।
  • xUnit — NUnit के निर्माताओं द्वारा आधुनिक फ्रेमवर्क, नए प्रोजेक्ट में पसंद किया जाता है।
  • Moq — मॉक-ऑब्जेक्ट बनाने के लिए लाइब्रेरी।
  • FluentAssertions — पढ़ने योग्य assert के लिए।


Moq के साथ xUnit पर यूनिट-टेस्ट का उदाहरण

मान लीजिए, हमारे पास डिस्काउंट कैलकुलेशन सेवा है जो यूज़र रिपॉजिटरी से संपर्क करती है:



public interface IUserRepository{    bool IsPremiumUser(int userId);}

public class DiscountService{ private readonly IUserRepository _userRepo; public DiscountService(IUserRepository userRepo) => _userRepo = userRepo;

public decimal CalculateDiscount(int userId, decimal amount) { if (_userRepo.IsPremiumUser(userId)) return amount * 0.9m; // 10% छूट return amount; }}

// टेस्टpublic class DiscountServiceTests{ [Fact] public void CalculateDiscount_ForPremiumUser_Returns90Percent() { // Arrange var mockRepo = new Mock<IUserRepository>(); mockRepo.Setup(r => r.IsPremiumUser(It.IsAny<int>())).Returns(true); var service = new DiscountService(mockRepo.Object);

// Act var result = service.CalculateDiscount(1, 100m);

// Assert Assert.Equal(90m, result); }}


सुझाव: पैरामीटराइज़्ड टेस्ट के लिए xUnit में [Theory] और [InlineData] का उपयोग करें — इससे कोड डुप्लिकेशन कम होता है।



2. इंटीग्रेशन टेस्टिंग: कम्पोनेंट कनेक्शन की जाँच



इंटीग्रेशन टेस्ट जाँचते हैं कि आपके मॉड्यूल वास्तविक बाहरी सिस्टम (डेटाबेस, कतारें, वेब सेवाएँ) के साथ कैसे इंटरैक्ट करते हैं। यूनिट-टेस्ट के विपरीत, यहाँ मॉक का उपयोग नहीं किया जाता — हम वास्तविक वातावरण स्थापित करते हैं।



लाइब्रेरी और दृष्टिकोण

  • TestContainers — सीधे टेस्ट से Docker कंटेनर (PostgreSQL, SQL Server, Redis) चलाता है।
  • WebApplicationFactory (Microsoft.AspNetCore.Mvc.Testing से) — ASP.NET Core का टेस्ट होस्ट बनाता है।
  • Respawn — कंटेनर को पुनः बनाए बिना टेस्ट के बीच DB साफ़ करता है।


TestContainers और WebApplicationFactory के साथ इंटीग्रेशन टेस्ट का उदाहरण

जाँचें कि हमारा API PostgreSQL में यूज़र को सही ढंग से सहेजता है:



public class UserApiIntegrationTests : IClassFixture<TestContainersFixture>{    private readonly HttpClient _client;    private readonly TestContainersFixture _fixture;

public UserApiIntegrationTests(TestContainersFixture fixture) { _fixture = fixture; var factory = new WebApplicationFactory<Program>() .WithWebHostBuilder(builder => { builder.ConfigureTestServices(services => { // वास्तविक कनेक्शन स्ट्रिंग को कंटेनर से बदलें services.RemoveAll<DbContextOptions<AppDbContext>>(); se

ब्लॉग

पुस्तक अनुशंसाएँ