Mocking এবং Dependency Injection Testing (DIT) হল সফটওয়্যার টেস্টিং এর দুটি গুরুত্বপূর্ণ কৌশল, যা ASP.Net অ্যাপ্লিকেশনগুলোর টেস্টিং কার্যক্রমকে আরও কার্যকর ও সহজ করে তোলে। এই কৌশলগুলোর মাধ্যমে আপনি কোডের বিভিন্ন অংশের সঠিকতা যাচাই করতে পারেন এবং আপনার অ্যাপ্লিকেশনটির বিভিন্ন কম্পোনেন্টকে আলাদাভাবে পরীক্ষা করতে সক্ষম হন।
Mocking হল টেস্টিংয়ের একটি প্রক্রিয়া, যেখানে আপনি একটি নির্দিষ্ট ডিপেন্ডেন্সির আচরণ নকল করেন (mock)। এটি সাধারনত তখন ব্যবহার করা হয়, যখন আপনি নির্দিষ্ট একটি ক্লাস বা মেথডের কার্যকারিতা টেস্ট করতে চান, তবে আপনি সেটির আসল বাস্তবায়ন (implementation) না চালিয়ে শুধুমাত্র তার আউটপুট/রেসপন্স পরীক্ষা করতে চান।
Mocking সাধারণত ব্যবহার হয় যখন:
Dependency Injection (DI) হল একটি ডিজাইন প্যাটার্ন, যা অ্যাপ্লিকেশনের কোডের মধ্যে ডিপেন্ডেন্সি গুলো সরাসরি ইনজেক্ট (inject) করার পরিবর্তে বাইরের কোনও কনটেইনার বা ফ্যাক্টরি থেকে ইনজেক্ট করা হয়। DI ব্যবহার করে আপনার কোড আরও টেস্টেবল, মডুলার এবং সহজে রিফ্যাক্টর করা যায়।
Dependency Injection Testing হল DI প্যাটার্নে কাজ করা অ্যাপ্লিকেশনের একক ইউনিট টেস্ট করার কৌশল। এই কৌশলের মাধ্যমে আপনি সার্ভিস বা কম্পোনেন্টের ডিপেন্ডেন্সি মক (mock) করে পরীক্ষা করতে পারেন।
ASP.Net Core অ্যাপ্লিকেশনে Moq লাইব্রেরি সবচেয়ে জনপ্রিয় একটি লাইব্রেরি, যা মক অবজেক্ট তৈরি করতে ব্যবহৃত হয়। Moq ব্যবহার করে আপনি আসল ডিপেন্ডেন্সির পরিবর্তে একটি মক (mock) অবজেক্ট তৈরি করতে পারেন, এবং সেই অবজেক্টের মাধ্যমে টেস্টিং করতে পারেন।
Moq প্যাকেজ ইনস্টল করা: প্রথমে, NuGet প্যাকেজ ম্যানেজার থেকে Moq প্যাকেজ ইনস্টল করতে হবে।
Install-Package Moq
Mock Object তৈরি করা: এখানে আমরা একটি IUserService
এর মক অবজেক্ট তৈরি করব এবং তা টেস্টে ব্যবহার করব।
using Moq;
using Xunit;
public interface IUserService
{
string GetUserName(int userId);
}
public class UserController
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
public string GetUserName(int userId)
{
return _userService.GetUserName(userId);
}
}
public class UserControllerTests
{
[Fact]
public void GetUserName_ReturnsCorrectUsername()
{
// Arrange: Mock IUserService
var mockUserService = new Mock<IUserService>();
mockUserService.Setup(service => service.GetUserName(It.IsAny<int>())).Returns("John Doe");
var controller = new UserController(mockUserService.Object);
// Act: Call the method
var result = controller.GetUserName(1);
// Assert: Verify the result
Assert.Equal("John Doe", result);
}
}
এখানে, IUserService
এর মক অবজেক্ট তৈরি করা হয়েছে যা GetUserName
মেথডটি John Doe
রিটার্ন করবে। এরপর সেই মক অবজেক্ট দিয়ে UserController
টেস্ট করা হয়েছে।
ASP.Net Core এর ডিপেন্ডেন্সি ইনজেকশন সিস্টেম ব্যবহার করে আপনি আপনার সার্ভিসগুলোকে সহজে ইনজেক্ট করতে পারেন এবং তাদের মকিং বা টেস্টিং করতে পারেন।
ASP.Net Core DI কনফিগারেশন: Startup.cs
এ ডিপেন্ডেন্সি ইনজেকশন কনফিগারেশন করতে হবে। এখানে আমরা একটি IProductService
এর ডিপেন্ডেন্সি ইনজেক্ট করব।
public interface IProductService
{
string GetProductName(int productId);
}
public class ProductService : IProductService
{
public string GetProductName(int productId)
{
return "Product " + productId;
}
}
public class HomeController : Controller
{
private readonly IProductService _productService;
public HomeController(IProductService productService)
{
_productService = productService;
}
public IActionResult Index(int productId)
{
var productName = _productService.GetProductName(productId);
return View("Index", productName);
}
}
Test Project Setup: এখন আপনি ASP.Net Core DI ব্যবহার করে আপনার টেস্ট প্রজেক্ট তৈরি করবেন এবং মক অবজেক্ট ইনজেক্ট করবেন।
public class HomeControllerTests
{
[Fact]
public void Index_ReturnsProductName()
{
// Arrange: Mock IProductService
var mockProductService = new Mock<IProductService>();
mockProductService.Setup(service => service.GetProductName(It.IsAny<int>())).Returns("Mock Product");
var controller = new HomeController(mockProductService.Object);
// Act: Call the Index method
var result = controller.Index(1) as ViewResult;
// Assert: Verify the result
Assert.Equal("Mock Product", result?.Model);
}
}
এখানে, IProductService
এর মক অবজেক্ট তৈরি করা হয়েছে এবং HomeController
এর Index
মেথড টেস্ট করা হয়েছে।
সারাংশ: Mocking এবং Dependency Injection Testing ASP.Net অ্যাপ্লিকেশন টেস্টিংয়ের শক্তিশালী কৌশল, যা ডিপেন্ডেন্সির আচরণ পরীক্ষা করতে সহায়তা করে এবং কোডের মডুলারিটি ও টেস্টেবিলিটি বৃদ্ধি করে। Moq লাইব্রেরি ব্যবহার করে ASP.Net অ্যাপ্লিকেশনগুলোর ইউনিট টেস্ট করা এবং ডিপেন্ডেন্সি ইনজেকশন কনটেইনারের মাধ্যমে টেস্টিং পরিচালনা করা খুবই সহজ।
Read more