如何配置我的设置文件以使用单元测试?

时间:2009-03-10 21:12:28

标签: c# .net nunit app-config

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您最好的选择可能是在代理类中包含对配置数据的访问权限,您可以在运行时根据需要重定向 - 不要直接使用内置API。