2010-02-02 14 views
6

क्या स्टब/मॉक के ऑब्जेक्ट सदस्य कॉल को स्टब के रूप में परिभाषित किए बिना नकल करना संभव है, और रिटर्न वैल्यू को सभी अलग वर्बोज लाइनों के रूप में भी सेट करना संभव है?क्या राइनो मोक गहरे/घोंसले वाले सदस्यों को सीधे कर सकते हैं?

उदाहरण:

[TestMethod] 
    public void AssignedPermissions_AssociateExists_ReturnsEdit_Rhino() 
    { 

     //Arrange 
     var fakeConfiguration = MockRepository.GenerateStub<IDomainControllerConfiguration>(); 
     var fakeAssociateRepository = MockRepository.GenerateStub<IAssociateRepository>(); 
     fakeConfiguration.Stub(x => x.AssociateRepository).Return(fakeAssociateRepository); 
     fakeAssociateRepository.Stub(x=>x.GetAssociatesByRole(null,false,null)).IgnoreArguments() 
      .Return(new IAssociate[]{MockRepository.GenerateStub<IAssociate>()}); 

     var domain = new DomainController(fakeConfiguration); 

     const AssignedPermission expected = AssignedPermission.Edit; 

     //Act 
     AssignedPermission actual = domain.AssignedPermissions(); 

     //Assert 
     Assert.AreEqual(expected, actual); 
    } 

उन सभी अस्थायी चर आवश्यक हैं बस नेस्टेड विधि कॉल बाहर ठूंठ?

+0

आप Demeter के कानून का उल्लंघन करने के परिणामों में से एक किया है: http://clintshank.javadevelopersjournal.com/long_unit_test_setup। एचटीएम –

+0

@wcoenen अच्छी तरह से .. कॉन्फ़िगरेशन ऑब्जेक्ट वास्तव में सीधे कॉलर के अंदर क्या नहीं संभालना चाहिए क्या मुझे लगता है? तो कम से कम यह घोंसला का एक स्तर महत्वपूर्ण या मूल्यवान लगता है। क्योंकि यह ज्यादातर एक नंगे डीटीओ – Maslow

+0

है, आपको कॉन्फ़िगरेशन ऑब्जेक्ट पर पास-थ्रू विधियों को जोड़ने की आवश्यकता नहीं है। क्यों न केवल भंडार के लिए एक कन्स्ट्रक्टर तर्क जोड़ें? 'नया डोमेन नियंत्रक (नकली कॉन्फ़िगरेशन, फर्जी रिपोजिटरी);' –

उत्तर

3

मैंने कभी कार्यक्षमता का उपयोग नहीं किया है, इसलिए मैं 100% निश्चित नहीं हूं कि यह काम करेगा, लेकिन सैद्धांतिक रूप से राइनो मोक्स "recursive mocking" का समर्थन करता है, जिससे आपको कम से कम fakeAssociateRepository को इस तरह कुछ करने से रोकना चाहिए :

var fakeConfiguration = MockRepository.GenerateStub<IDomainControllerConfiguration>(); 
fakeConfiguration.Stub(x => x.AssociateRepository.GetAssociatesByRole(null,false,null)) 
      .IgnoreArguments() 
      .Return(new IAssociate[]{MockRepository.GenerateStub<IAssociate>()}); 

var domain = new DomainController(fakeConfiguration); 

(ध्यान दें: कोड का परीक्षण नहीं किया, या यहाँ तक संकलित)

संबंधित मुद्दे