हमारे एपीआई एक अंतरफलक IEnumerable से इस तरह विरासत में है छोटा करते के साथ:राइनो का मजाक उड़ाता है: समस्या IEnumerator.MoveNext() जब एक IEnumerable <T> इंटरफ़ेस
public interface IFoos : IEnumerable<IFoo>
{
// Additional foo-collection-specific methods
}
मैं एक वर्ग के लिए एक इकाई परीक्षण लिख रहा हूँ कि पर निर्भर करता है IFoos।
[Test]
public void FooItUp_JumpsUpJumpsUpAndGetsDown()
{
// Arrange
var mocks = new MockRepository();
var stubFoo1 = mocks.Stub<IFoo>();
var stubFoo2 = mocks.Stub<IFoo>();
var stubFoos = mockRepository.Stub<IFoos>().
var fooEnumerator = new List<IFoo> { stubFoo1, stubFoo2 }.GetEnumerator();
stubFoos.Stub(x => x.GetEnumerator()).Return(null).WhenCalled(x => x.ReturnValue = fooEnumerator);
Bar bar = new bar();
bar.Foos = stubFoos;
// Act
bar.FooItUp();
// Assert
...
}
जब:
public class Bar
{
public IFoos Foos {get; set;}
public void FooItUp()
{
foreach (IFoo foo in this.Foos)
{
foo.JumpAround();
}
}
}
मेरी इकाई परीक्षण में, मैं निर्भरता बाहर ठूंठ और इतने तरह राइनो Mocks के साथ एक गणनाकार वापस जाने के लिए प्रबंधन: यह एक विधि है कि एक IFoos पर दोहराता है, इस तरह है मैं इस परीक्षण चलाने की कोशिश, एक अपवाद फेंका जाता है:
System.InvalidOperationException : Previous method 'IEnumerator.MoveNext();' requires a return value or an exception to throw.
IEnumerable इंटरफ़ेस को देखते हुए, हालांकि, केवल विधि मैं लागू करने या एक वापसी मान सेट करने के GetEnumerator() जो मैं एक किया है के लिए होना चाहिए बोव, है ना? Bar.FooItUp() में फोरैच लूप क्यों नहीं है सूची गणनाकर्ता पर MoveNext() को कॉल करें?
आपके परीक्षण/मैक्स/उदाहरण कोड के नाम के लिए प्रमुख प्रोप। :-) –