Mocking Framework ব্যবহার (e.g., Moq) দিয়ে Unit Test লেখা

Microsoft Technologies - এমভিভিএম (MVVM) Unit Testing এবং MVVM |
185
185

Unit Testing হল সফটওয়্যার ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ, যেখানে কোডের নির্দিষ্ট অংশ (ফাংশন বা মেথড) আলাদাভাবে পরীক্ষা করা হয়। Unit Test এর মাধ্যমে আমরা কোডের কার্যকারিতা নিশ্চিত করতে পারি। Mocking Framework যেমন Moq ব্যবহার করে, আপনি বিভিন্ন ডিপেনডেন্সি এবং সিস্টেমের বাহ্যিক উপাদানগুলিকে "মক" করতে পারেন, যার মাধ্যমে একটি নির্দিষ্ট কোডের অংশ পরীক্ষা করা যায়, যদিও তার বাহ্যিক ডিপেনডেন্সি থাকে না।

Moq হল একটি জনপ্রিয় .NET mocking লাইব্রেরি যা Unit Testing-এ খুবই সহায়ক। এটি আপনার মক অবজেক্ট তৈরি করতে সাহায্য করে, যা আপনার কোডের নির্দিষ্ট অংশের আচরণ পরীক্ষার জন্য ব্যবহৃত হয়।


Moq দিয়ে Unit Test লেখার প্রক্রিয়া

Moq লাইব্রেরি ব্যবহার করে, আপনি মক অবজেক্ট তৈরি করতে পারেন যা আপনার টেস্টের জন্য নির্দিষ্ট আচরণ প্রদান করবে। এটি ডিপেনডেন্সি ইনজেকশন (DI) বা অন্য বাহ্যিক সিস্টেমের সাথে নির্ভরশীল কোডের টেস্টিং সহজ করে তোলে।


Moq ইন্সটলেশন

প্রথমে, Moq লাইব্রেরি আপনার প্রোজেক্টে যোগ করতে হবে। যদি আপনি NuGet ব্যবহার করেন, তবে এটি আপনার প্যাকেজ ম্যানেজার কনসোল থেকে ইনস্টল করা যাবে:

Install-Package Moq

আপনি .NET CLI ব্যবহার করেও এটি ইনস্টল করতে পারেন:

dotnet add package Moq

Unit Test এর উদাহরণ

ধরা যাক, আপনার একটি IOrderService ইন্টারফেস রয়েছে, যা একটি ProcessOrder মেথড রাখে। এখন, আমরা একটি OrderProcessor ক্লাস তৈরি করব, যা IOrderService ব্যবহার করে।

1. IOrderService Interface

public interface IOrderService
{
    bool ProcessOrder(Order order);
}

2. OrderProcessor Class

public class OrderProcessor
{
    private readonly IOrderService _orderService;

    public OrderProcessor(IOrderService orderService)
    {
        _orderService = orderService;
    }

    public bool ProcessOrder(Order order)
    {
        if (order == null || !order.IsValid)
        {
            return false;
        }

        return _orderService.ProcessOrder(order);
    }
}

এখানে, OrderProcessor ক্লাসটি IOrderService ইন্টারফেসের উপর নির্ভরশীল। এর মাধ্যমে আমরা মক অবজেক্ট তৈরি করতে পারব এবং তার সাথে টেস্ট চালাতে পারব।

3. Order Class

public class Order
{
    public bool IsValid { get; set; }
}

এখন, আমরা OrderProcessor ক্লাসের জন্য একটি Unit Test লিখব যেখানে IOrderService মক করা হবে।

4. Unit Test with Moq

Moq ব্যবহার করে, আমরা IOrderService মক করব এবং OrderProcessor টেস্ট করব।

using Moq;
using Xunit;

public class OrderProcessorTests
{
    [Fact]
    public void ProcessOrder_ShouldReturnFalse_WhenOrderIsNull()
    {
        // Arrange
        var mockOrderService = new Mock<IOrderService>();
        var orderProcessor = new OrderProcessor(mockOrderService.Object);

        // Act
        var result = orderProcessor.ProcessOrder(null);

        // Assert
        Assert.False(result);
    }

    [Fact]
    public void ProcessOrder_ShouldReturnFalse_WhenOrderIsInvalid()
    {
        // Arrange
        var mockOrderService = new Mock<IOrderService>();
        var orderProcessor = new OrderProcessor(mockOrderService.Object);
        var invalidOrder = new Order { IsValid = false };

        // Act
        var result = orderProcessor.ProcessOrder(invalidOrder);

        // Assert
        Assert.False(result);
    }

    [Fact]
    public void ProcessOrder_ShouldReturnTrue_WhenOrderIsValid()
    {
        // Arrange
        var mockOrderService = new Mock<IOrderService>();
        mockOrderService.Setup(service => service.ProcessOrder(It.IsAny<Order>())).Returns(true);

        var orderProcessor = new OrderProcessor(mockOrderService.Object);
        var validOrder = new Order { IsValid = true };

        // Act
        var result = orderProcessor.ProcessOrder(validOrder);

        // Assert
        Assert.True(result);
    }
}

এখানে, আমরা তিনটি টেস্ট কেস লিখেছি:

  1. ProcessOrder_ShouldReturnFalse_WhenOrderIsNull: এটি পরীক্ষা করে যে, যদি অর্ডার null হয়, তবে ফলাফল false হবে।
  2. ProcessOrder_ShouldReturnFalse_WhenOrderIsInvalid: এটি পরীক্ষা করে যে, যদি অর্ডার invalid (যেমন IsValid ফিল্ড false) হয়, তবে ফলাফল false হবে।
  3. ProcessOrder_ShouldReturnTrue_WhenOrderIsValid: এটি পরীক্ষা করে যে, যদি অর্ডার valid হয়, তবে মক IOrderService থেকে প্রাপ্ত ফলাফল true হবে।

Moq Setup এবং Assertion

  • Setup: mockOrderService.Setup()-এর মাধ্যমে আমরা মক অবজেক্টের প্রত্যাশিত আচরণ নির্ধারণ করি।
  • It.IsAny(): এটি নির্দেশ করে যে, আমরা কোন ধরনের Order অবজেক্ট পাস করতে পারি।
  • Returns(): এটি মক অবজেক্টে যে ফলাফল প্রত্যাশিত, তা নির্ধারণ করে।
  • Assert: এটি পরীক্ষিত ফলাফলকে প্রত্যাশিত ফলাফলের সাথে তুলনা করে।

Moq দিয়ে Exception Handling টেস্ট

Moq দিয়ে আপনি Exception এর টেস্টও করতে পারেন, যেমন যদি মক অবজেক্টটি একটি নির্দিষ্ট ধরনের এক্সসেপশন ফেলে:

Example: Testing Exception

[Fact]
public void ProcessOrder_ShouldThrowException_WhenServiceFails()
{
    // Arrange
    var mockOrderService = new Mock<IOrderService>();
    mockOrderService.Setup(service => service.ProcessOrder(It.IsAny<Order>()))
                    .Throws(new InvalidOperationException("Service failed"));

    var orderProcessor = new OrderProcessor(mockOrderService.Object);
    var validOrder = new Order { IsValid = true };

    // Act & Assert
    var exception = Assert.Throws<InvalidOperationException>(() => orderProcessor.ProcessOrder(validOrder));
    Assert.Equal("Service failed", exception.Message);
}

এখানে, mockOrderService.Setup() ব্যবহার করে আমরা ইচ্ছাকৃতভাবে InvalidOperationException ফেলে দিয়েছি, এবং Assert.Throws() ব্যবহার করে আমরা এক্সসেপশনটি পরীক্ষা করছি।


Moq এর সুবিধা

  • ইনজেকশন এবং স্বতন্ত্রতা: মক অবজেক্টগুলি আপনার টেস্টকে সহজ এবং স্বতন্ত্র করে তোলে।
  • ডিপেনডেন্সি ম্যানেজমেন্ট: বাহ্যিক সিস্টেম বা ডিপেনডেন্সি ইনজেকশনের প্রয়োজন ছাড়াই আপনি কোডের লজিক টেস্ট করতে পারেন।
  • ফ্লেক্সিবিলিটি: মক অবজেক্টগুলি সহজে কনফিগার এবং পরীক্ষা করা যায়, যার ফলে কোডের টেস্টিং সহজ এবং কার্যকর হয়।

সারাংশ

Moq ব্যবহার করে Unit Testing-এ মক অবজেক্ট তৈরি এবং পরিচালনা করা খুবই কার্যকর। এটি আপনার কোডের নির্দিষ্ট অংশ পরীক্ষা করতে সাহায্য করে, ডিপেনডেন্সি ইনজেকশন এবং বাহ্যিক সিস্টেমের উপস্থিতি ছাড়াই। Moq টেস্টিংকে আরও সহজ, সাশ্রয়ী এবং কার্যকরী করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion