मैं वास्तविक कार्यान्वयन के लिए फर्जी ऑब्जेक्ट पर कॉल प्रॉक्सी करने का प्रयास कर रहा हूं। इसका कारण यह है कि मैं मशीन के WasToldTo और WhenToldTo का उपयोग करने में सक्षम होना चाहता हूं। विशिष्टताओं जो केवल एक इंटरफेस प्रकार के झुंड पर काम करता है।FakeItEasy प्रॉक्सी विधियों को वास्तविक कार्यान्वयन के लिए कॉल किया गया
इसलिए मैं अपने असली ऑब्जेक्ट को सभी कॉल प्रॉक्सी करने के लिए निम्न कार्य कर रहा हूं।
public static TFake Proxy<TFake, TInstance>(TFake fake, TInstance instance) where TInstance : TFake
{
fake.Configure().AnyCall().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
return fake;
}
मैं इस तरह इसका उपयोग करूंगा।
var fake = Proxy<ISomeInterface, SomeImplementation>(A.Fake<ISomeInterface>(), new SomeImplementation());
//in my assertions using Machine.Specifications (reason I need a fake of an interface)
fake.WasToldTo(x => x.DoOperation());
समस्या यह है कि यह केवल शून्य विधियों के लिए काम करता है, क्योंकि Invokes विधि वापसी मूल्य के साथ कुछ भी नहीं कर रहा है। (Func के बजाय एक्शन परम)
तब मैं WithReturnValue विधि का उपयोग करके ऐसा करने का प्रयास कर रहा था।
public static TFake Proxy(TFake fake, TInstance instance) where TInstance : TFake
{
fake.Configure().AnyCall()..WithReturnType().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
fake.Configure().AnyCall()..WithReturnType().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
fake.Configure().AnyCall()..WithReturnType().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
//etc.
return fake;
}
हालांकि Invokes विधि अभी भी जिस तरह से मैं चाहता हूं (अभी भी Func के बजाय कार्रवाई) काम नहीं करता है। तो वापसी मूल्य अभी भी उपयोग नहीं किया जाता है।
क्या वर्तमान नवीनतम संस्करण के साथ इसे प्राप्त करने का कोई तरीका है?
मैंने पहले से ही FakeItEasy github भंडार में एक मुद्दा दायर किया है। https://github.com/FakeItEasy/FakeItEasy/issues/435
धन्यवाद, रैपिंग दृष्टिकोण मेरी समस्या हल करता है। –