2

我有一个正在为其编写单元测试的库。该库由两个应用程序使用:一个是 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 加载设置,但如果运行单元测试,则从第三个位置加载。

4

3 回答 3

3

或者,只需将 app.config 文件添加到包含相关信息的单元测试项目中。

于 2009-03-10T21:35:16.313 回答
2

如果您的单元测试旨在测试代码,那么根本不要依赖配置文件。从类中提取依赖项并使用依赖项注入将数据注入。这样,您可以存根配置类。

如果您实际上只是在测试配置文件,您应该能够使用ConfigurationManager显式加载它,尽管我不建议对配置数据进行单元测试。它是烟雾测试的更好候选者。

于 2009-03-10T21:32:27.927 回答
1

您最好的选择可能是将对配置数据的访问封装在一个代理类中,您可以在运行时根据需要重定向它——不要直接使用内置 API。

于 2009-03-10T21:26:16.163 回答