मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जिसमें कई परतें हैं। स्क्रीन पर डेटा दिखाने के लिए डेटा स्रोत, व्यावसायिक तर्क से डेटा को हेरफेर करने के लिए डेटा स्रोत, व्यापार तर्क को पुनः प्राप्त करने और सहेजने के लिए डेटा एक्सेस परत।
मैं व्यापार तर्क परत की इकाई परीक्षण भी कर रहा हूं। एकमात्र आवश्यकता व्यवसाय परत तर्क के प्रवाह का परीक्षण करना है। इसलिए मैं डेटा एक्सेस लेयर को मॉक करने के लिए Moq फ्रेमवर्क का उपयोग करता हूं और MS MS यूनिट के साथ बिजनेस लॉजिक लेयर का परीक्षण करता हूं।
मैं इंटरफ़ेस प्रोग्रामिंग का उपयोग कर रहा हूं ताकि डिजाइन को जितना संभव हो उतना कम करने के लिए ताकि यूनिट परीक्षण किया जा सके। व्यापार परत कॉल इंटरफ़ेस के माध्यम से डेटा एक्सेस लेयर।
मैं एक समस्या का सामना कर रहा हूं जब मैं व्यवसाय तर्क पद्धति का परीक्षण करने की कोशिश कर रहा हूं। वह विधि कुछ काम करती है और एक ऑब्जेक्ट बनाती है और इसे डेटा एक्सेस लेयर में पास करती है। जब मैं उस डेटा ऐक्सेस लेयर विधि का मखौल उड़ाने की कोशिश कर रहा हूँ तो यह सफलतापूर्वक नकली नहीं हो सकता।
यहां मैं अपनी समस्या दिखाने के लिए एक डेमो कोड बनाने की कोशिश कर रहा हूं।
नमूना:
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);
}
मॉकिंग के समय इकाई परीक्षण मामले में मैं एक कर्मचारी वस्तु भेज रहा हूं, लेकिन जब व्यापार तर्क पद्धति को लागू कर रहा है, तो यह विधि के अंदर अलग कर्मचारी वस्तु का निर्माण कर रहा है। इसलिए मैं वस्तु का मजाक नहीं उड़ा सकता।
उस मामले में कैसे डिजाइन करें ताकि मैं समस्या को हल कर सकूं?