मेरे पास एक कक्षा है जो ICollection<SomeConcreteClass>
लागू करती है। NUnit संग्रह बाधाओं को इसे एक संग्रह के रूप में नहीं पहचानते हैं।NUnit संग्रह बाधाओं के अनुसार कक्षा को संग्रह बनाता है?
उदा। Assert.That(sut, Has.No.Member(someObjectOfTypeSomeConcreteClass));
फेंकता System.ArgumentException : The actual value must be a collection
और Assert.That(sut, Is.Empty);
खाली sut
के साथ विफल रहता है।
तो संग्रह संग्रह कब होता है (एनयूनीट के अनुसार)?
स्टैक ट्रेस:
System.ArgumentException : The actual value must be a collection Parametername: actual
at NUnit.Framework.Constraints.CollectionConstraint.Matches(Object actual)
at NUnit.Framework.Constraints.NotConstraint.Matches(Object actual)
MyTestFile.cs(36,0): at MyAssembly.MyTestFixture.MyTestMethod()
से ऊपर समस्याओं NUnit 2.4.3.0 के साथ हुई। मैंने बस 2.6 के साथ कोशिश की। Is.Empty
अब काम करता है, लेकिन Has.No.Member
अभी भी विफल रहता है। यह Equals()
या operator ==()
पर भी कॉल नहीं करता है। यह संग्रह तत्वों की तुलना कैसे करता है? RhinoMocks Arg<MyCollection>.List.Count(Is.Equal(1))
अब भी असफल हो जाता है।
निष्कर्ष:
NUnit 2.4 संग्रह की कमी की आवश्यकता होती है संग्रह के लिए गैर सामान्य ICollection के कार्यान्वयन एक संग्रह (कि मूल प्रश्न का उत्तर) के रूप में मान्यता प्राप्त होना के साथ । अपेक्षित के रूप में IENumerable समानता काम करता है।
एनयूनिट 2.6 (और संभवतः 3.0) के साथ IEnumerable
एस की समानता मिलान तत्वों द्वारा जांच की जाती है भले ही Equals
ओवरराइड हो। यही कारण है कि यदि सदस्यता IEnumerable
स्वयं हैं तो सदस्यता बाधा काम नहीं करती है। यह एक ज्ञात मुद्दा है (https://bugs.launchpad.net/nunit-3.0/+bug/646786)।
विवरण के लिए मेरा अपना जवाब देखें।
आप फेंका अपवाद से भरा ढेर पोस्ट कर सकते हैं? –