2009-06-04 28 views
10

Tôi có nhiều thử nghiệm NUnit và tôi muốn mỗi thử nghiệm sử dụng tệp app.config cụ thể. Có cách nào để đặt lại cấu hình cho tệp cấu hình mới trước mỗi lần kiểm tra không?Tải lại app.config với nunit

Trả lời

8

Hãy thử:

/* 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

Điều này dường như hoạt động hoàn hảo. Bạn sẽ rất tử tế để giải thích những gì nó thực sự làm gì? :-) – Karsten

+2

Điều này không hiệu quả đối với tôi (sử dụng .NET 4.0). Tôi đã phải mở rộng nó, xin vui lòng xem câu trả lời của tôi ở đây: http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime/6151688#6151688 –

0

Nếu bạn phát hành là bạn cho các tập hợp khác nhau của các trường hợp thử nghiệm cần phải có cấu hình khác nhau, bạn có thể có các dự án thử nghiệm khác nhau với một tập tin cấu hình cho mỗi. Sau đó chạy từng dự án thử nghiệm của bạn.

+0

một dự án mỗi bài kiểm tra? – apollodude217

0

I answered a similar question cho Powershell. Kỹ thuật tương tự nên làm việc ở đây, chỉ cần gọi sau khi bắt đầu thử nghiệm của bạn:

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

EDIT: Trên thực tế trông như thế này là phức tạp hơn trong một exe biên soạn - bạn cần làm something like this để có được cấu hình được tải lại.