2011-10-18 6 views
5

मैं हाल ही में FakeItEasy का उपयोग करने का प्रयास कर रहा था, लेकिन मैं कई quirks के आसपास काम किए बिना एक ठोस वर्ग से नकली बनाने में सक्षम नहीं था।FakeItEasy एक कक्षा का नकली बनाएँ

public class MyObject { 
public MyObject(){} 
} 
... 
MyObject fakeObject = A.Fake<MyObject>(); 

जो एक निर्माता के परिणामस्वरूप तर्क अपवाद

मिलान के साथ नहीं मिला अगला मैंने कोशिश की:

public class MyObject { 
public MyObject(string temp){} 
} 
... 
MyObject fakeObject = A.Fake<MyObject>(x => x.WithArgumentsForConstructor(() => new MyObject("temp"))); 

जो एक समान त्रुटि हुई

मैं निम्नलिखित की कोशिश की।

अंत में मैंने कोशिश की:

public class MyObject { 
//public MyObject(){} 
} 
... 
MyObject fakeObject = A.Fake<MyObject>(); 

कौन सा मुझे अंत में नकली बनाने की अनुमति दी। मैं उलझन में हूं कि एक ठोस वर्ग को फेंकने के उदाहरणों में से अधिकांश यह आसान है कि मैंने इसे पाया है? और दस्तावेज विधि का उपयोग क्यों, उपरोक्त परीक्षण # 2, काम नहीं किया?

क्या एक ठोस वर्ग को पकाने के लिए कुछ सीमाएं हैं जिन्हें दस्तावेज नहीं किया गया है?

उत्तर

0

मैं समस्या का पुन: उत्पन्न नहीं कर सकता, जब यह मेरे लिए काम करता है समकक्ष कोड चलाता है। क्या आप एक बनाम समाधान बना सकते हैं जो समस्या को पुन: उत्पन्न करता है और submit an issue on GitHub?

1

मैं पहचान यह कोई पुराना सवाल है, तो मैं किसी और को जो इस मुद्दे को है और इस प्रश्न में ठोकर के लिए इस उत्तर पोस्ट कर रहा हूँ। मैं इस तरह के एक समान मुद्दे को दोहराने में सक्षम था।

मैं एक वर्ग है:

public class Service : IService 
{ 
    public Service (int prNum) 
    { 
    //call to a c++ wrapper class (this is where the problem occurs) 
    //some other calls 
    } 
} 

मैं एक इकाई परीक्षण के लिए एक नकली के रूप में सेवा वर्ग बनाने के लिए कोशिश कर रहा था:

private Service fakeServ = A.Fake<Service>((x => x.WithArgumentsForConstructor(() => new Service(3)))); 

मैं एक ही त्रुटि प्राप्त किया गया था: निर्माता के साथ नहीं मिला मिलान तर्क अपवाद

आखिरकार मैंने डीबगर के साथ एफ़ैक कॉल में कदम रखा और कन्स्ट्रक्टर के अंदर कोड पाया (कि एएफके कॉल किया गया था) एक ब्लॉक शुरू करने में विफल रहा था विज़ुअल स्टूडियो के कारण वैश्विक मोड की वजह से व्यवस्थापक मोड में नहीं चल रहा है। (CreateFileMapping, त्रुटि कोड 5, System Error 0x5: CreateFileMapping())

मैंने विजुअल स्टूडियो को व्यवस्थापक के रूप में चलाने के लिए सेट किया है और समस्या हल हो गई है, नकली बनाया गया है।

ऐसा लगता है कि पैरामीटर के साथ एक कन्स्ट्रक्टर के साथ बनाया गया नकली, कन्स्ट्रक्टर के माध्यम से चलाता है (जो कि मैं नकली बनाने से बचने की उम्मीद कर रहा था क्योंकि वैश्विक स्मृति के रूप में मेरी यूनिट टेस्ट के फोकस का हिस्सा नहीं है I मुझे यह देखना होगा कि मुझे यह बनाने का एक अलग तरीका है या नहीं)।

आपके द्वारा पोस्ट किया गया कोड इंगित नहीं करता है कि आप रैपर वर्गों को कॉल कर रहे हैं या वैश्विक मेमोरी बना रहे हैं, लेकिन आप डिबगर के साथ नकली निर्माण कॉल में कदम उठाने का प्रयास कर सकते हैं यह देखने के लिए कि क्या कन्स्ट्रक्टर चलाना शुरू होता है और यदि कोई विफलता है कन्स्ट्रक्टर, और क्या त्रुटियां लौटा दी जाती हैं।