मैं नियंत्रक की Index
कार्रवाई का परीक्षण करने का प्रयास कर रहा हूं। कार्रवाई का उपयोग किसी डोमेन Customer
ऑब्जेक्ट को मानचित्र मॉडल TestCustomerForm
पर मैप करने के लिए करती है। हालांकि यह काम करता है मैं Index
कार्रवाई से प्राप्त परिणामों का परीक्षण करने का सबसे अच्छा तरीका हूं।एक व्यूमोडेल को मैप करने के लिए ऑटोमैपर का उपयोग करने के बाद मुझे और किस प्रकार परीक्षण करना चाहिए?
नियंत्रक के सूचकांक कार्रवाई इस तरह दिखता है:
public ActionResult Index()
{
TestCustomerForm cust = Mapper.Map<Customer,
TestCustomerForm>(_repository.GetCustomerByLogin(CurrentUserLoginName));
return View(cust);
}
और इसकी TestMethod
इस तरह दिखता है:
[TestMethod]
public void IndexShouldReturnCustomerWithMachines()
{
// arrange
var customer = SetupCustomerForRepository(); // gets a boiler plate customer
var testController = CreateTestController();
// act
ViewResult result = testController.Index() as ViewResult;
// assert
Assert.AreEqual(customer.MachineList.Count(),
(result.ViewData.Model as TestCustomerForm).MachineList.Count());
}
CreateTestController
विधि मैं Rhino.Mocks
का प्रयोग कर एक ग्राहक भंडार नकली और यह करने के लिए सेट अप करने के लिए ग्राहक को SetupCustomerForRepository
से वापस करें। इस तरह से मुझे पता है कि भंडार इच्छित ग्राहक को वापस कर देगा जब Index
कार्रवाई कॉल _repository.GetCustomerByLogin(CurrentUserLoginName)
पर कॉल करेगी। इसलिए, मुझे लगता है कि IndexShouldReturnCustomerWithMachines
को संतुष्ट करने के लिए एक समान गणना पर्याप्त है।
उन सभी ने कहा कि मैं इस बात से चिंतित हूं कि मुझे क्या परीक्षण करना चाहिए।
result.ViewData.Model as TestCustomerForm
डालने के लिए यह अजीब लगता है। क्या यह वास्तव में एक मुद्दा है? यह मुझे चिंतित करता है क्योंकि इस उदाहरण में मैं वास्तव में परीक्षण संचालित विकास नहीं कर रहा हूं और ऐसा लगता है कि मैं परीक्षण को पूरा करने के लिए एक विशेष कार्यान्वयन पर भरोसा कर रहा हूं।- क्या सही मैपिंग सुनिश्चित करने के लिए और अधिक उचित परीक्षण हैं?
- क्या मुझे
TestCustomerForm
से प्रत्येक मैप की गई संपत्ति का परीक्षण करना चाहिए? - क्या अधिक सामान्य नियंत्रक कार्रवाई परीक्षण हैं जो मुझे करना चाहिए?
public interface IMapper<TSource, TDest> { TDest Map(TSource source); } public CustomerToTestCustomerFormMapper: IMapper<Customer, TestCustomerForm> { static CustomerToTestCustomerFormMapper() { // TODO: Configure the mapping rules here } public TestCustomerForm Map(Customer source) { return Mapper.Map<Customer, TestCustomerForm>(source); } }
इसके बाद आप नियंत्रक में इस पारित:
ग्रेट उत्तर जो बहुत समझ में आता है। वंशावली के लिए क्या आप अपना टेस्ट स्टेटमेंट जोड़ना चाहते हैं? – ahsteele
यह नई वेबएपी के साथ कैसे काम करेगा, जहां मेरी गेट विधि एक आईनेमेरेबल लौट रही है और कोई कार्रवाई परिणाम नहीं है? –
shashi
@ सैसीबॉय मैं वेब एपीआई के साथ एक पृथक सेवा परत का उपयोग करता हूं, जहां आप स्वयं का एक समान अमूर्त बना सकते हैं। –