2012-04-30 8 views
9

मैं एक कस्टम ConfigurationElementCollection इकाई परीक्षण करने की कोशिश कर रहा हूं, लेकिन मुझे प्रोग्रामेटिक रूप से संग्रह को पॉप्युलेट करने में समस्या आ रही है।मैं प्रोग्राममैटिक रूप से कॉन्फ़िगरेशन एलिमेंट कोलेक्शन में तत्व कैसे जोड़ूं?

ConfigurationErrorsException: तत्व 'जोड़ें' एक उच्च स्तर विन्यास में बंद कर दिया गया है जब मैं BaseAdd() कहते हैं, मैं निम्नलिखित अपवाद मिलता है।

हालांकि, यह समस्या केवल कई परीक्षणों को चलाने पर दिखाई देती है। इन दो परीक्षणों पर विचार करें:

private Fixture Fixtures = new Fixture(); // AutoFixtures 

[Test] 
public void test1() 
{ 
    var tc = Fixtures.CreateAnonymous<TenantCollection>(); 
    var t = Fixtures.CreateAnonymous<Tenant>(); 
    tc.Add(t); 
} 

[Test] 
public void test2() 
{ 
    var tc = Fixtures.CreateAnonymous<TenantCollection>(); 
    var t = Fixtures.CreateAnonymous<Tenant>(); 
    tc.Add(t); 
} 

प्रत्येक व्यक्तिगत परीक्षण अकेले निष्पादित होने पर गुजरता है। एक साथ चलते समय, लॉकिंग अपवाद फेंक दिया जाता है।

यहां क्या हो रहा है? मैं या तो लॉक के आस-पास संग्रह या काम को अनलॉक कैसे कर सकता हूं?

उत्तर

18

मुझे अभी भी पूरी तरह से यकीन नहीं है कि ConfigurationElement लॉकिंग काम करता है, लेकिन मुझे कम से कम यूनिट परीक्षण के लिए ठीक लगता है: नए आइटम जोड़ने से पहले, LockItem को गलत पर सेट करें।

तो मेरे कस्टम ConfigurationElementCollection में मेरे पास विधि Add() है (जिसे मैं ओपी में कॉल कर रहा हूं)। इसे इस तरह दिखने के लिए संशोधित करने की आवश्यकता है:

public class TenantCollection : ConfigurationElementCollection 
{ 
    public void Add(Tenant element) 
    { 
     LockItem = false; // the workaround 
     BaseAdd(element); 
    } 
} 
+2

आप अपने TenantCollection कार्यान्वयन से IsReadOnly विधि को ओवरराइड कर सकते हैं और झूठी वापसी कर सकते हैं –

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