আমি এমন একটি অ্যাপ্লিকেশন নিয়ে কাজ করছি যার একাধিক স্তর রয়েছে। ডেটা উত্স থেকে ডেটা পুনরুদ্ধার এবং সংরক্ষণের জন্য ডেটা অ্যাক্সেস লেয়ার, ডেটা ম্যানিপুলেট করতে ব্যবসায়ের লজিক, স্ক্রিনে ডেটা প্রদর্শনের জন্য ইউজার ইন্টারফেস।
আমি ব্যবসার লজিক স্তরটির ইউনিট টেস্টিংও করছি। একমাত্র প্রয়োজন হ'ল ব্যবসায়ের স্তর যুক্তির প্রবাহ পরীক্ষা করা। সুতরাং আমি ডেটা অ্যাক্সেস লেয়ারকে উপহাস করার জন্য ম্যাক ফ্রেমওয়ার্ক ব্যবহার করি এবং এমএস ইউনিটের সাথে ইউনিটটি ব্যবসায়ের লজিক স্তরটি পরীক্ষা করি।
ডিজাইনের যতটা সম্ভব ডিকুয়াল করতে আমি ইন্টারফেস প্রোগ্রামিং ব্যবহার করছি যাতে ইউনিট পরীক্ষা করা যায়। ইন্টারফেসের মাধ্যমে ব্যবসায় স্তর কল ডেটা অ্যাক্সেস স্তর।
আমি যখন ব্যবসার লজিক পদ্ধতির একটি পরীক্ষা করার চেষ্টা করছি তখন আমি সমস্যার মুখোমুখি হয়েছি। এই পদ্ধতিটি কিছু কাজ করে এবং একটি অবজেক্ট তৈরি করে ডেটা অ্যাক্সেস লেয়ারে দেয় pass যখন আমি সেই ডেটা অ্যাক্সেস স্তর পদ্ধতিটি উপহাস করার চেষ্টা করছি তখন এটি সফলভাবে বিদ্রূপ করতে পারে না।
এখানে আমি আমার সমস্যাটি দেখানোর জন্য একটি ডেমো কোড তৈরি করার চেষ্টা করছি।
মডেল:
public class Employee
{
public string Name { get; set; }
}
ডেটা অ্যাক্সেস স্তর:
public interface IDal
{
string GetMessage(Employee emp);
}
public class Dal : IDal
{
public string GetMessage(Employee emp)
{
// Doing some data source access work...
return string.Format("Hello {0}", emp.Name);
}
}
ব্যবসায় যুক্তিযুক্ত স্তর:
public interface IBll
{
string GetMessage();
}
public class Bll : IBll
{
private readonly IDal _dal;
public Bll(IDal dal)
{
_dal = dal;
}
public string GetMessage()
{
// Object creating inside business logic method.
Employee emp = new Employee();
string msg = _dal.GetMessage(emp);
return msg;
}
}
ইউনিট পরীক্ষা:
[TestMethod]
public void Is_GetMessage_Return_Proper_Result()
{
// Arrange.
Employee emp = new Employee; // New object.
Mock<IDal> mockDal = new Mock<IDal>();
mockDal.Setup(d => d.GetMessage(emp)).Returns("Hello " + emp.Name);
IBll bll = new Bll(mockDal.Object);
// Act.
// This will create another employee object inside the
// business logic method, which is different from the
// object which I have sent at the time of mocking.
string msg = bll.GetMessage();
// Assert.
Assert.AreEqual("Hello arnab", msg);
}
বিদ্রূপ করার সময় ইউনিট পরীক্ষার ক্ষেত্রে আমি একজন কর্মচারী বস্তু পাঠাচ্ছি তবে ব্যবসায়ের যুক্তি পদ্ধতিটি যখন প্রবর্তন করা হয় তখন এটি পদ্ধতির অভ্যন্তরে বিভিন্ন কর্মচারী বস্তু তৈরি করছে। এজন্য আমি বস্তুটিকে উপহাস করতে পারি না।
সেক্ষেত্রে কীভাবে ডিজাইন করব যাতে আমি সমস্যার সমাধান করতে পারি?