ASP.NET Core অ্যাপ্লিকেশনের জন্য ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট খুবই গুরুত্বপূর্ণ। এগুলি আপনার অ্যাপ্লিকেশনের কোডের গুণগত মান নিশ্চিত করতে এবং নতুন ফিচার যোগ করার সময় পূর্ববর্তী ফিচারগুলির সঠিকতা বজায় রাখতে সাহায্য করে। এখানে আমরা আলোচনা করব কিভাবে ASP.NET Core MVC এবং Web API টেস্ট করা যায়।
ASP.NET Core MVC অ্যাপ্লিকেশনের জন্য টেস্ট তৈরি করতে হলে, প্রথমে আপনাকে Unit Test এবং Integration Test কনসেপ্টের মধ্যে পার্থক্য বুঝতে হবে। MVC টেস্টে সাধারণত Controller এর একশন মেথডগুলোর জন্য টেস্ট করা হয়।
Unit Testing তে, আমরা নির্দিষ্ট একটি ইউনিট (যেমন Controller, Service) টেস্ট করি। আমরা xUnit বা NUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহার করতে পারি। এখানে xUnit এর উদাহরণ দেওয়া হলো।
xUnit ইনস্টল করা:
dotnet add package xunit
dotnet add package Microsoft.AspNetCore.Mvc.Testing
dotnet add package Moq
Controller Test করা:
উদাহরণস্বরূপ, যদি আপনি HomeController
টেস্ট করতে চান:
public class HomeControllerTests
{
private readonly HomeController _controller;
private readonly Mock<IProductService> _mockService;
public HomeControllerTests()
{
_mockService = new Mock<IProductService>();
_controller = new HomeController(_mockService.Object);
}
[Fact]
public async Task Index_ReturnsAViewResult_WithAListOfProducts()
{
// Arrange
_mockService.Setup(service => service.GetProducts())
.ReturnsAsync(new List<Product> { new Product { Id = 1, Name = "Product 1" } });
// Act
var result = await _controller.Index();
// Assert
var viewResult = Assert.IsType<ViewResult>(result);
var model = Assert.IsAssignableFrom<List<Product>>(viewResult.ViewData.Model);
Assert.Single(model);
}
}
এখানে, Moq ব্যবহার করে IProductService
এর মক তৈরি করা হয়েছে এবং HomeController
এর Index
একশন টেস্ট করা হয়েছে।
Integration Test-এ, আমরা পুরো অ্যাপ্লিকেশন বা কন্ট্রোলার ইন্টিগ্রেশন টেস্ট করি। ASP.NET Core-এ WebApplicationFactory ব্যবহার করে Integration Test করা হয়।
Microsoft.AspNetCore.Mvc.Testing
প্যাকেজ ইনস্টল করতে হবে।Integration Test উদাহরণ:
public class HomeControllerIntegrationTests : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public HomeControllerIntegrationTests(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
[Fact]
public async Task Index_ReturnsSuccessStatusCode()
{
// Arrange
var client = _factory.CreateClient();
// Act
var response = await client.GetAsync("/Home/Index");
// Assert
response.EnsureSuccessStatusCode();
}
}
এখানে, WebApplicationFactory
ব্যবহার করে আমরা পুরো অ্যাপ্লিকেশনকে মক করে HomeController
এর Index
একশন টেস্ট করেছি।
ASP.NET Core Web API এর জন্য Integration Test তৈরি করা হয়, যাতে API এর রেসপন্স, স্ট্যাটাস কোড, এবং কনটেন্ট টেস্ট করা যায়। আমরা xUnit
, Microsoft.AspNetCore.Mvc.Testing
, এবং HttpClient ব্যবহার করব।
HttpClient
ব্যবহার করে API রিকোয়েস্ট করা হয় এবং রেসপন্স চেক করা হয়।API Controller Test উদাহরণ:
public class ProductsControllerTests : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public ProductsControllerTests(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
[Fact]
public async Task GetProducts_ReturnsOkResponse()
{
// Arrange
var client = _factory.CreateClient();
// Act
var response = await client.GetAsync("/api/products");
// Assert
response.EnsureSuccessStatusCode();
var products = await response.Content.ReadAsStringAsync();
Assert.Contains("Product", products);
}
}
এখানে, আমরা WebApplicationFactory
ব্যবহার করে API কল করলাম এবং GetAsync
মেথড ব্যবহার করে Products
API টেস্ট করলাম।
অনেক সময়, Web API এর Controller গুলি এক্সটার্নাল সার্ভিস বা ডেটাবেসের সাথে যোগাযোগ করতে পারে। এই ধরনের ডিপেনডেন্সি মক করা গুরুত্বপূর্ণ। নিচে Moq ব্যবহার করে মক করা উদাহরণ দেখানো হলো।
public class ProductsControllerTests
{
private readonly ProductsController _controller;
private readonly Mock<IProductService> _mockService;
public ProductsControllerTests()
{
_mockService = new Mock<IProductService>();
_controller = new ProductsController(_mockService.Object);
}
[Fact]
public async Task GetProduct_ReturnsOkResult_WithProduct()
{
// Arrange
_mockService.Setup(service => service.GetProduct(1))
.ReturnsAsync(new Product { Id = 1, Name = "Product 1" });
// Act
var result = await _controller.GetProduct(1);
// Assert
var actionResult = Assert.IsType<ActionResult<Product>>(result);
var okResult = Assert.IsType<OkObjectResult>(actionResult.Result);
var product = Assert.IsType<Product>(okResult.Value);
Assert.Equal(1, product.Id);
}
}
এখানে, IProductService
এর মক তৈরি করা হয়েছে এবং ProductsController
এর GetProduct
একশন টেস্ট করা হয়েছে।
ASP.NET Core MVC এবং Web API টেস্ট করার জন্য, আপনাকে Unit Test এবং Integration Test এর মধ্যে পার্থক্য বুঝতে হবে। xUnit এবং Moq এর মতো টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি Controller এর একশন টেস্ট করতে পারেন এবং WebApplicationFactory ব্যবহার করে আপনি পুরো API বা MVC অ্যাপ্লিকেশন ইন্টিগ্রেশন টেস্ট করতে পারেন। টেস্ট করা আপনাকে অ্যাপ্লিকেশন উন্নয়নে সহায়তা করবে এবং কোডের সঠিকতা নিশ্চিত করবে।
common.read_more