यह करने का एक तरीका है।
एक वैकल्पिक मैं का सामना करना पड़ा है:
अपने edmx फ़ाइल बनाएं, तो यह संस्थाओं autogenerate नहीं करता कस्टम उपकरण को हटा दें।
edmx फ़ाइल खोलें, राइट क्लिक करें और कोड जनरेशन आइटम जोड़ें - डेटाबेस के अंतर्गत ऑनलाइन टेम्पलेट्स पर जाएं और ईएफ पॉको मॉकोबजेक्ट जनरेटर का चयन करें। यह दो टी 4 टेम्पलेट्स बनाता है (एक इकाई के लिए और दूसरा ऑब्जेक्ट संदर्भ और नकली ऑब्जेक्ट संदर्भ के लिए)।
एक टी 4 टेम्पलेट आपके लिए आपके पॉको इकाइयों को उत्पन्न करेगा। अन्य टी 4 टेम्पलेट एक इंटरफ़ेस तैयार करेगा जिसे आप काम की इकाई के रूप में उपयोग करने के लिए बढ़ा सकते हैं जिसे वास्तविक ऑब्जेक्ट संदर्भ और नकली ऑब्जेक्ट संदर्भ में लागू किया गया है। इसे विस्तारित करने के लिए आपको जेनरेट इंटरफ़ेस (शून्य SaveChanges()) पर एक अतिरिक्त विधि शामिल करने और नकली ऑब्जेक्ट संदर्भ पर उस विधि के कार्यान्वयन के लिए T4 टेम्पलेट को संशोधित करने की आवश्यकता है।
मुझे यह बहुत अच्छी तरह से काम करने के लिए मिला है।
यूनिट परीक्षण उद्देश्यों के लिए यद्यपि, आप काम की अपनी इकाई का परीक्षण नहीं करना चाहेंगे (जब तक कुछ वस्तुओं को सत्यापित/हटाया नहीं जाता है)। इसके बजाय आप पूर्वनिर्धारित जिम्मेदारियों के साथ भंडारों का परीक्षण करेंगे - आमतौर पर संदर्भ (पूर्व रोगी नियुक्तियों) के भीतर परिभाषित किया जाता है। यह appropiately की संरचना करने के
public class PatientAppointmentRepository : IPatientAppointmentRepository
{
//Injected via IOC in constructor
private readonly IUnitOfWork _unitOfWork;
private readonly IPatientAppointmentLogic _patientAppointmentLogic;
public void CreateAppointment(PatientAppointmentModel model)
{
var appointment = ModelMapper.Instance.To<PatientAppointment>(model);
var appointmentAdded = _patientAppointmentLogic.Add(appointment);
if(appointmentAdded)
_unitOfWork.SaveChanges();
}
}
public class PatientAppointmentLogic : IPatientAppointmentLogic
{
private readonly IUnitOfWork _unitOfWork; //Set via constructor
private readonly PatientLogic _patientLogic;
public bool Validate(PatientAppointment appointment)
{
if(appointment == null)
throw new ArgumentNullException("appointment");
//perform some logic here
return true;
}
public void Add(PatientAppointment appointment)
{
if(appointment == null)
throw new ArgumentNullException("appointment");
if(!Validate(appointment)) return; //Or throw an exception, up to you
var patient = _patientLogic.GetById(appointment.PatientId);
if(patient == null) return;
patient.PatientAppointments.Add(appointment);
}
}
यह वास्तव में अपने से ऊपर:
आप कुछ इस तरह करते हैं चाहते हैं। आपके पास एक और नियुक्ति लॉजिक रिपोजिटरी हो सकती है जिसमें एक उदाहरण के रूप में आधार सत्यापन है।
आदर्श रूप से, सामान्य सत्यापन बाहरी संसाधनों (जैसे डेटाबेस) पर निर्भर नहीं होना चाहिए।
आपको एक झुकाव में एक सत्यापन संदर्भ बनाने में सक्षम होना चाहिए जिसका उपयोग आगे सत्यापन में किया जाएगा (पहले 'बड़े पैमाने पर' मान्य करने से पहले 'सस्ता' वैध होगा)।
कभी-कभी सत्यापन के लिए आपको आवश्यक सभी 'मान' एक ऐसी इकाई के अंदर है जिसे आपको वैसे भी चाहिए, फिर उसे सत्यापन संदर्भ के रूप में उपयोग करें।
शुभकामनाएँ!