2012-01-30 19 views
7

मैं एक नियंत्रक एक्सटेंशन का उपयोग कर रहा हूँ, और मैं FakeItEasy (v 1.7.4) इस तरह का उपयोग कर यह नकली करने की कोशिश की:क्या एक विस्तार विधि नकली/नकली करना संभव है?

A.CallTo(() => controller.RenderView(A<string>.Ignored,A<object>.Ignored,null)).Returns(""); 

लेकिन मैं इस त्रुटि मिलती है:

System.NullReferenceException : Object reference not set to an instance of an object. 
at System.Object.GetType() 
at FakeItEasy.Creation.ProxyGeneratorSelector.MethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget, ref String failReason) 
at FakeItEasy.Configuration.DefaultInterceptionAsserter.AssertThatMethodCanBeInterceptedOnInstance(MethodInfo method, Object callTarget) 
at FakeItEasy.Configuration.FakeConfigurationManager.CallTo(Expression`1 callSpecification) 

उत्तर

15

यह नहीं है मुमकिन। FakeItEasy (और अन्य लोकप्रिय मुफ्त ढांचे, जैसे मोक या राइनोमोक्स) द्वारा प्रयुक्त प्रॉक्सीइंग/अवरोधक पुस्तकालय स्थिर विधियों (स्थैतिक गुण, सीलबंद कक्षाएं और वास्तव में गैर-आभासी उदाहरण विधियों) के अवरोध की अनुमति नहीं देते हैं। और विस्तार विधि सिर्फ एक प्रकार की स्थिर विधि है।

आप TypeMock या JustMock पर एक नज़र डाल सकते हैं, जिसमें ऐसी कार्यक्षमता है।

+1

वैकल्पिक रूप से एक सख्त नकली के रूप में यह बना सकते हैं और स्थिर विधि तो कॉन्फ़िगर कर सकते हैं आप एक नि: शुल्क विकल्प चाहते हैं, Moles भी स्थिर तरीकों में से मजाक की अनुमति देता है // अनुसंधान .microsoft.com/en-us/परियोजनाओं/pex/ –

+4

यह FakeItEasy पर आ रहा है। कितनी जल्दी, मुझे यकीन नहीं है - https://github.com/FakeItEasy/FakeItEasy/issues/90 –

3

यदि एक्सटेंशन विधि को एक अलग असेंबली में घोषित किया गया है, तो आप एक ही नामस्थान के साथ एक प्रतिस्थापन असेंबली में लिंक कर सकते हैं।

हालांकि, आपको इस असेंबली से किसी अन्य आवश्यक प्रकार को भी बदलना होगा। http:

+1

+1: यह वास्तव में दिलचस्प समाधान है जब तक आपको बहुत अधिक जगह नहीं लेनी पड़ेगी। –

+0

@jimmy_keen धन्यवाद! यह मूल रूप से लिंक सीम है [विरासत संहिता के साथ प्रभावी ढंग से कार्य करना] (http://www.amazon.com/Working- प्रभावी रूप से- लीगेसी- माइकल- फेदरस/डीपीआईआर 31177052)। – TrueWill

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