如何模拟 C# 应用程序的配置
How to mock configuration for C# application
我写了一个 C# 应用程序,想模拟配置值。
例如,我在远程机器上配置了一个文件创建路径,测试时想在本地创建。
我想为实现和接口的配置创建一个包装器 class,使用这种方法可以模拟接口和 return 模拟值。
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>
这种方法确实有效,但它是这种情况下的最佳做法吗?
至于最佳实践,那将是一个见仁见智的问题。在干净、可测试、可维护的代码方面,该方法是常用的。
这是您方法的一种变体。 (基本上提供相同的功能)
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; }
}
}
我写了一个 C# 应用程序,想模拟配置值。 例如,我在远程机器上配置了一个文件创建路径,测试时想在本地创建。
我想为实现和接口的配置创建一个包装器 class,使用这种方法可以模拟接口和 return 模拟值。
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>
这种方法确实有效,但它是这种情况下的最佳做法吗?
至于最佳实践,那将是一个见仁见智的问题。在干净、可测试、可维护的代码方面,该方法是常用的。
这是您方法的一种变体。 (基本上提供相同的功能)
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; }
}
}