सी # (.NET) में परीक्षण: डेवलपर के लिए फ्रेमवर्क और उपकरण

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

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

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

सी # (.NET) में परीक्षण: फ्रेमवर्क और उपकरणों का अवलोकन

\n\n

गुणवत्तापूर्ण परीक्षण .NET प्लेटफॉर्म पर विश्वसनीय सॉफ्टवेयर का आधार है। सी # पारिस्थितिकी तंत्र में मॉड्यूलर (यूनिट), एकीकरण और स्वीकृति परीक्षण के लिए कई परिपक्व फ्रेमवर्क मौजूद हैं। इस लेख में हम मुख्य उपकरणों, उनकी विशेषताओं पर चर्चा करेंगे और व्यावहारिक कोड उदाहरण देंगे।

\n\n

यूनिट-परीक्षण के लिए मुख्य फ्रेमवर्क

\n\n

.NET Core और .NET 5+ में तीन मुख्य फ्रेमवर्क के माध्यम से परीक्षण के लिए अंतर्निहित समर्थन लागू किया गया है:

\n\n
    \n
  • MSTest — माइक्रोसॉफ्ट का क्लासिक फ्रेमवर्क, शुरुआती लोगों के लिए सरल।
  • \n
  • NUnit — विशेषताओं के समृद्ध सेट के साथ लोकप्रिय ओपन-सोर्स फ्रेमवर्क।
  • \n
  • xUnit.net — आधुनिक, हल्का और लचीला उपकरण, जो NUnit के लेखक द्वारा बनाया गया है।
  • \n
\n\n

तीनों Visual Studio, Rider और dotnet CLI के माध्यम से समर्थित हैं। चुनाव टीम की प्राथमिकताओं पर निर्भर करता है, लेकिन xUnit और NUnit जटिल परिदृश्यों के लिए अधिक लचीले माने जाते हैं।

\n\n

xUnit पर परीक्षण का उदाहरण

\n

xUnit का उपयोग करके एक सरल कैलकुलेटर के परीक्षण पर विचार करें:

\n\n
using Xunit;\n\npublic class Calculator\n{\n    public int Add(int a, int b) => a + b;\n    public int Divide(int a, int b) => b == 0 ? throw new DivideByZeroException() : a / b;\n}\n\npublic class CalculatorTests\n{\n    [Fact]\n    public void Add_ShouldReturnSum_WhenTwoNumbers()\n    {\n        // Arrange\n        var calc = new Calculator();\n\n        // Act\n        var result = calc.Add(3, 5);\n\n        // Assert\n        Assert.Equal(8, result);\n    }\n\n    [Theory]\n    [InlineData(10, 2, 5)]\n    [InlineData(9, 3, 3)]\n    [InlineData(7, 1, 7)]\n    public void Divide_ShouldReturnQuotient(int a, int b, int expected)\n    {\n        var calc = new Calculator();\n        var result = calc.Divide(a, b);\n        Assert.Equal(expected, result);\n    }\n\n    [Fact]\n    public void Divide_ShouldThrow_WhenDivideByZero()\n    {\n        var calc = new Calculator();\n        Assert.Throws<DivideByZeroException>(() => calc.Divide(5, 0));\n    }\n}
\n\n

विशेषता [Fact] एक सामान्य परीक्षण को दर्शाती है, जबकि [InlineData] के साथ [Theory] विभिन्न इनपुट डेटा के साथ एक परीक्षण चलाने की अनुमति देता है।

\n\n

मॉक-ऑब्जेक्ट के लिए उपकरण

\n\n

यूनिट-परीक्षण में अक्सर परीक्षण किए जा रहे वर्ग को बाहरी निर्भरताओं (डेटाबेस, API, फ़ाइल सिस्टम) से अलग करने की आवश्यकता होती है। इसके लिए मॉक-फ्रेमवर्क का उपयोग किया जाता है:

\n\n
    \n
  • Moq — सबसे लोकप्रिय, सरल सिंटैक्स, अच्छा दस्तावेज़ीकरण।
  • \n
  • NSubstitute — अधिक संक्षिप्त, fluent-इंटरफ़ेस के साथ।
  • \n
  • FakeItEasy — त्वरित स्टब बनाने के लिए मैत्रीपूर्ण API।
  • \n
\n\n

Moq के उपयोग का उदाहरण

\n

मान लीजिए कि हमारे पास एक सेवा है जो ईमेल भेजती है। हम वास्तविक भेजने के बिना तर्क का परीक्षण करना चाहते हैं:

\n\n
using Moq;\nusing Xunit;\n\npublic interface IEmailSender\n{\n    void Send(string to, string subject, string body);\n}\n\npublic class NotificationService\n{\n    private readonly IEmailSender _sender;\n    public NotificationService(IEmailSender sender) => _sender = sender;\n\n    public void NotifyUser(string email, string message)\n    {\n        if (string.IsNullOrWhiteSpace(email))\n            throw new ArgumentException("Email is required");\n        _sender.Send(email, "Notification", message);\n    }\n}\n\npublic class NotificationServiceTests\n{\n    [Fact]\n    public void NotifyUser_ShouldCallSend_WhenValidEmail()\n    {\n        // Arrange\n        var mockSender = new Mock<IEmailSender>();\n        var service = new NotificationService(mockSender.Object);\n\n        // Act\n        service.NotifyUser("test@example.com", "Hello!");\n\n        // Assert\n        mockSender.Verify(s => s.Send("test@example.com", "Notification", "Hello!"), Times.Once);\n    }\n    [                    

अनुशंसाएँ