2011-01-08 11 views
5
public interface ICell 
     { 
      int Value{get;} 

      void IncrementValue(); 
     } 

मैं RhinoMocks में इस इंटरफ़ेस के लिए एक स्टब बनाना चाहता हूं। मेरे पास केवल पढ़ने की संपत्ति है और जब भी मैं incrementValue() विधि को कॉल करता हूं, तो मैं उसके मूल्य में वृद्धि करना चाहता हूं। क्या यह संभव है? मैं इस स्टब के लिए एक नया वर्ग नहीं बनाना चाहता हूं।एक पढ़ने के व्यवहार को रोकें केवल

उत्तर

3

मेरे पास जय के समान प्रस्ताव है, बस छोटा। सुनिश्चित नहीं है कि इसमें कुछ कमीएं हैं।

int count = 0; 

    var mock = MockRepository.GenerateStub<ICell>(); 
    mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42); 
    mock.Stub(p => p.IncrementValue()).WhenCalled(a => { 
     count = (int)count+1; 
    }); 

वापसी (42) वहाँ डाल दिया है कहने के लिए "मूल्य कुछ देता है, फेंक नहीं है" और WhenCalled (एक => a.ReturnValue = गिनती) ओवरराइड कि वापसी घाटी 42 गिनती के वर्तमान मूल्य के साथ।

0

जब आप फ़ंक्शन को कॉल करते हैं तो आप rhino mocks को चलाने के लिए एक लैम्ब्डा दे सकते हैं। यह लैम्ब्डा फिर काउंटर बढ़ा सकता है। आप एक उदाहरण पा सकते हैं here

+0

मैं लगता है कि मार्टिन की समस्या से बेहतर है क्या बढ़ाना है ... इंटरफेस में केवल एक संपत्ति है, कोई सेट नहीं है –

0

मैं भी इस के साथ आया था:

cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0); 

आपकी मदद मैं WhenCalled विधि के व्यवहार से उलझन में पड़ गया था इससे पहले कि ... लेकिन मुझे लगता है कि अपने दृष्टिकोण यह एक

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