我有一个库,我正在编写单元测试。该库由两个应用程序使用:一个是Windows服务,另一个是执行某些注册表读写的命令行应用程序。每个文件都有一个稍微不同的App.config文件,该文件在启动时从库中加载。例如:
public RetentionService()
{
SettingHive = new Hive();
TimingService = new RetentionTimingService(SettingHive);
AppSettingsReader asr = new AppSettingsReader();
object appsListObj = asr.GetValue(@"blocking-process-list", Type.GetType(@"System.String"));
string appsList = appsListObj.ToString();
_BlockingAppNames = RetentionService.ListFromList(appsList);
string targetList = asr.GetValue(@"target-files", Type.GetType(@"System.String")).ToString();
_TargetLogs = RetentionService.ListFromList(targetList);
}
当我尝试从单元测试中使用此库时,它无法加载,因为加载库的应用程序(可能是nunit)没有带有相应键的* .exe.config文件。
有什么更好的方法可以做到这一点?我希望库在生产中加载每个应用程序的* .exe.config中的设置,但是如果运行单元测试则从第三个位置加载。
答案 0 :(得分:3)
或者,只需将app.config文件添加到包含相关信息的单元测试项目中。
答案 1 :(得分:2)
如果您的单元测试旨在测试代码,那么根本不要依赖于配置文件。从类中提取您的依赖项并使用依赖项注入来注入数据。这样,您可以存根配置类。
如果 实际上只是测试配置文件,您应该能够使用ConfigurationManager显式加载它,尽管我不建议单元测试配置数据。它是更好的烟雾测试候选者。
答案 2 :(得分:1)
您最好的选择可能是在代理类中包含对配置数据的访问权限,您可以在运行时根据需要重定向 - 不要直接使用内置API。