WCF (Windows Communication Foundation) সার্ভিসের Unit Testing এবং Mocking গুরুত্বপূর্ণ অংশ, যেহেতু এটি আমাদের বাস্তব সার্ভিসে কোনো প্রভাব ফেলানো ছাড়াই সার্ভিসের কার্যকারিতা পরীক্ষা করতে দেয়। Mocking আমাদের বাস্তব প্রক্রিয়া বা উপাদানগুলি (যেমন ডেটাবেস, সার্ভিস কল, বা অন্য কোন নির্ভরতা) মডেল করার জন্য ব্যবহৃত হয়, যাতে আমরা শুধুমাত্র টেস্ট করা কোডের অংশে ফোকাস করতে পারি। এতে দুটি জনপ্রিয় Mocking Framework ব্যবহার করতে পারি, Moq এবং NSubstitute।
এই গাইডে, আমরা Moq এবং NSubstitute ব্যবহার করে কিভাবে WCF সার্ভিস টেস্ট করা যায়, তা দেখাবো।
Mocking Frameworks: Moq এবং NSubstitute
- Moq: এটি .NET এ সবচেয়ে জনপ্রিয় mocking লাইব্রেরি। এটি সহজ এবং শক্তিশালীভাবে mock, stub, এবং verify করার সুবিধা দেয়।
- NSubstitute: এটি Moq এর একটি সহজ এবং স্বাভাবিক বিকল্প, যা সহজে ব্যবহৃত হয় এবং মকিং করতে সহজে উপযোগী।
ধাপ ১: Moq ব্যবহার করে WCF Service Test করা
Moq ব্যবহার করে WCF সার্ভিসের unit testing করার জন্য, আপনাকে প্রথমে service contract এবং mocked dependencies তৈরি করতে হবে।
১.১ Service Contract তৈরি করা
ধরা যাক, আমাদের একটি WCF সার্ভিস রয়েছে যেটি একটি GetData মেথডের মাধ্যমে ডেটা রিটার্ন করবে।
[ServiceContract]
public interface IMyService
{
[OperationContract]
string GetData(int value);
}
১.২ Service Implementation তৈরি করা
এই ইন্টারফেসের একটি বাস্তবায়ন (implementation) তৈরি করুন:
public class MyService : IMyService
{
public string GetData(int value)
{
return $"You entered: {value}";
}
}
১.৩ Moq ব্যবহার করে Unit Test তৈরি করা
এখন, আমরা Moq ব্যবহার করে এই সার্ভিসটিকে mock করবো এবং তার মেথড পরীক্ষা করবো।
- Moq এবং xUnit (বা NUnit) লাইব্রেরি ইন্সটল করুন:
Install-Package Moq
Install-Package xunit
Install-Package xunit.runner.visualstudio
- Unit Test লিখুন:
using Moq;
using Xunit;
public class MyServiceTest
{
[Fact]
public void GetData_ReturnsCorrectMessage()
{
// Arrange
var mockService = new Mock<IMyService>();
mockService.Setup(service => service.GetData(It.IsAny<int>())).Returns((int value) => $"You entered: {value}");
var service = mockService.Object;
// Act
var result = service.GetData(5);
// Assert
Assert.Equal("You entered: 5", result);
}
}
এখানে, আমরা Moq ব্যবহার করে IMyService ইন্টারফেসের একটি mock অবজেক্ট তৈরি করেছি এবং তার GetData মেথডকে mock করেছি। তারপরে, সার্ভিসের কার্যকারিতা পরীক্ষা করা হয়েছে।
ধাপ ২: NSubstitute ব্যবহার করে WCF Service Test করা
NSubstitute ব্যবহারের জন্য কিছুটা ভিন্ন পদ্ধতি ব্যবহার করা হয়, তবে এর সিনট্যাক্স খুবই সহজ এবং সরল।
২.১ NSubstitute ব্যবহার করে Unit Test তৈরি করা
- NSubstitute এবং xUnit লাইব্রেরি ইন্সটল করুন:
Install-Package NSubstitute
Install-Package xunit
Install-Package xunit.runner.visualstudio
- Unit Test লিখুন:
using NSubstitute;
using Xunit;
public class MyServiceTest
{
[Fact]
public void GetData_ReturnsCorrectMessage()
{
// Arrange
var service = Substitute.For<IMyService>();
service.GetData(Arg.Any<int>()).Returns((int value) => $"You entered: {value}");
// Act
var result = service.GetData(10);
// Assert
Assert.Equal("You entered: 10", result);
}
}
এখানে:
- Substitute.For() ব্যবহার করা হয়েছে সার্ভিসের একটি mock তৈরি করতে।
- Returns() ব্যবহার করা হয়েছে মকড মেথডের আউটপুট কনফিগার করার জন্য।
- Arg.Any() ব্যবহার করা হয়েছে যে কোন int মানের জন্য মকড মেথডের আউটপুট প্রয়োগ করার জন্য।
ধাপ ৩: Test Coverage এবং Verifying Behavior
এখন, আমরা টেস্ট কভারেজ এবং verify behavior যোগ করবো। এটি নিশ্চিত করবে যে, mock করা মেথডটি ঠিকভাবে কল হয়েছে কিনা।
Moq দিয়ে Behavior Verify করা
[Fact]
public void GetData_CalledOnce_VerifyBehavior()
{
// Arrange
var mockService = new Mock<IMyService>();
mockService.Setup(service => service.GetData(It.IsAny<int>())).Returns((int value) => $"You entered: {value}");
var service = mockService.Object;
// Act
service.GetData(5);
// Assert
mockService.Verify(service => service.GetData(It.IsAny<int>()), Times.Once);
}
এখানে, Verify মেথড ব্যবহার করে আমরা নিশ্চিত করেছি যে, GetData মেথডটি একবারই কল হয়েছে।
NSubstitute দিয়ে Behavior Verify করা
[Fact]
public void GetData_CalledOnce_VerifyBehavior()
{
// Arrange
var service = Substitute.For<IMyService>();
service.GetData(Arg.Any<int>()).Returns((int value) => $"You entered: {value}");
// Act
service.GetData(5);
// Assert
service.Received(1).GetData(Arg.Any<int>());
}
এখানে, Received() মেথড ব্যবহার করে আমরা যাচাই করেছি যে, GetData মেথডটি একবার কল হয়েছে।
সারাংশ
- Moq এবং NSubstitute হল দুইটি জনপ্রিয় mocking framework যা WCF সার্ভিসের unit testing এর জন্য ব্যবহৃত হয়।
- Moq এ Setup(), Verify() ব্যবহার করে মেথডের আউটপুট কাস্টমাইজ এবং মেথড কল যাচাই করা যায়।
- NSubstitute ব্যবহার করে খুব সহজে Substitute.For() এর মাধ্যমে mock তৈরি এবং Received() ব্যবহার করে মেথডের কল যাচাই করা যায়।
- Unit testing এবং mocking মেথডগুলি সার্ভিসের নির্ভরতা সরিয়ে শুধুমাত্র নির্দিষ্ট কোডের অংশে ফোকাস করতে সাহায্য করে।
এই পদ্ধতিগুলির মাধ্যমে WCF সার্ভিসের কার্যকারিতা এবং এর বিভিন্ন উপাদানের পরীক্ষা সহজেই করা সম্ভব।
Read more