2016-03-30 8 views
2

私はC#アプリケーションを作成しましたが、構成値を模擬したいと思います。 たとえば、リモートマシン上でファイルを作成するためのパスを設定し、テスト時にローカルに作成したいと考えています。C#アプリケーションの構成を模擬する方法

私は、この方法論を使用してインターフェイスをモックし、模擬値を返すかもしれない、実装とインターフェイスを実装するためのラッパークラスを作成することを考えました。

public interface IConfigurationProvider 
{ 
    string GetFileOutputPath(string path); 
} 

public class ConfigurationWrapper : IConfigurationProvider 
{ 
    return ConfigurationManager.AppSettings.Get("FileOutputPath"); 
} 

構成:

<configuration> 
    <appSettings> 
     <add key="FileOutputPath" value="RemoteServerPath" /> 
    </appSettings> 
</configuration> 

このアプローチは、必ず作業を行いますが、それは、このシナリオのためのベストプラクティスですか?

+0

あなたはテストプロジェクトapp.configに設定を入れたのですか?これは私がいつもしてきたことであり、何の問題もありませんでした。 –

+0

それは私がいつもそれをしてきた方法です、それは大丈夫です。私はそれがより良い方法があるべきであるように思われることに同意するが、私はそれを見つけられていない。 Webアプリケーションでは、web.config、web.debug.config、web.release.configを取得し、うまく動作します。私はapp.configを使ってそれをやりたいと思っていますが、決して動作させることはできません。 – ManOVision

答えて

1

これまでのベストプラクティスは、意見の問題です。クリーンで、テスト可能で、保守可能なコードに関しては、このアプローチが一般的に使用されます。

あなたのアプローチの変形です。 (基本的に同じ機能を提供します)

using System.Configuration; 

public interface IApplicationSettings { 
    string this[string setting] { get; } 
} 

public class ConfigAppSettings : IApplicationSettings { 
    public string this[string setting] { 
     get { return ConfigurationManager.AppSettings[setting]; } 
    } 
} 

public interface IConnectionStrings { 
    string this[string name] { get; } 
} 

public class ConfigConnectionStrings : IConnectionStrings { 
    public string this[string name] { 
     get { return ConfigurationManager.ConnectionStrings[name].ConnectionString; } 
    } 
} 
関連する問題