nunit

2009-06-04 14 views
10

के साथ app.config को दोबारा लोड करें मेरे पास एकाधिक NUnit परीक्षण हैं, और मैं प्रत्येक टेस्ट को एक विशिष्ट app.config फ़ाइल का उपयोग करना चाहता हूं। प्रत्येक परीक्षण से पहले कॉन्फ़िगरेशन को एक नई कॉन्फ़िगरेशन फ़ाइल में रीसेट करने का कोई तरीका है?nunit

उत्तर

8

प्रयास करें:

/* Usage 
* using(AppConfig.Change("my.config")) { 
* // do something... 
* } 
*/ 
public abstract class AppConfig : IDisposable 
{ 
    public static AppConfig Change(string path) 
    { 
     return new ChangeAppConfig(path); 
    } 
    public abstract void Dispose(); 

    private class ChangeAppConfig : AppConfig 
    { 
     private bool disposedValue = false; 
     private string oldConfig = Conversions.ToString(AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE")); 

     public ChangeAppConfig(string path) 
     { 
      AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); 
      typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0); 
     } 

     public override void Dispose() 
     { 
      if (!this.disposedValue) 
      { 
       AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", this.oldConfig); 
      typeof(ConfigurationManager).GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, 0); 
       this.disposedValue = true; 
      } 
      GC.SuppressFinalize(this); 
     } 
    } 
} 
+0

यह सही काम करने लगता है। क्या आप यह समझाने के लिए बहुत दयालु होंगे कि वास्तव में यह क्या करता है? :-) – Karsten

+2

यह मेरे लिए काम नहीं करता (.NET 4.0 का उपयोग कर)। मुझे इसे विस्तारित करना था, कृपया मेरा जवाब यहां देखें: http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime/6151688#6151688 –

0

यदि आप जारी करते हैं कि आप परीक्षण मामलों के विभिन्न सेटों के लिए अलग-अलग कॉन्फ़िगरेशन की आवश्यकता है तो आपके पास प्रत्येक के लिए कॉन्फ़िगरेशन फ़ाइल के साथ विभिन्न परीक्षण परियोजनाएं हो सकती हैं। फिर एक समय में अपनी परीक्षण परियोजनाओं को चलाएं।

+0

एक परीक्षण प्रति परियोजना? – apollodude217

0

पावरहेल के लिए answered a similar question। उसी तकनीक का यहाँ काम करना चाहिए, बस अपने परीक्षण के शुरू में निम्नलिखित फोन:

System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", configPath)

संपादित करें: असल में लगता है कि यह एक संकलित exe के भीतर और अधिक जटिल है - आप आदेश प्राप्त करने के लिए क्या करने की जरूरत something like this कॉन्फ़िगर पुनः लोड किया गया।