C# C:使用不同的配置文件运行每个单元测试

C# C:使用不同的配置文件运行每个单元测试,c#,unit-testing,C#,Unit Testing,我目前正在开发一个可以在任何应用程序中使用的插件,该插件的配置是通过使用web.config或app.config文件来完成的 现在,我想对我的插件进行单元测试。我想测试不同条件下的不同行为: 对于exmaple: 只有一项应标记为“默认”。 提供程序的集合可以在插件中注册,但是名称必须是唯一的,否则会引发特定的异常。 我的问题: 我有一个单元测试项目,我想用另一个应用程序配置文件测试每个方法,这可能吗 我已尝试从ExeConfiguration读取文件,但无法正常工作 谢谢你的反馈 我的建议是

我目前正在开发一个可以在任何应用程序中使用的插件,该插件的配置是通过使用web.config或app.config文件来完成的

现在,我想对我的插件进行单元测试。我想测试不同条件下的不同行为:

对于exmaple:

只有一项应标记为“默认”。 提供程序的集合可以在插件中注册,但是名称必须是唯一的,否则会引发特定的异常。 我的问题:

我有一个单元测试项目,我想用另一个应用程序配置文件测试每个方法,这可能吗

我已尝试从ExeConfiguration读取文件,但无法正常工作

谢谢你的反馈


我的建议是模拟与配置文件的集成,而不是直接使用它。这种方法提供了更大的灵活性,并且无需担心多个配置文件。
您可以使用模拟框架,也可以在获取配置值的代码之上创建自己的抽象层。

这与@THG在回答中解释的一样

public interface IConfiguration
{
    string SettingA { get; }


    string SettingB { get; }
}


public class Configuration : IConfiguration
{

    public string SettingA
    {
        get
        {
            return ConfigurationManager.AppSettings["SettingA"];
        }
    }

    public string SettingB
    {
        get
        {
            return ConfigurationManager.AppSettings["SettingB"];
        }
    }
}
那么在你的测试中

    var config = MockRepository.GenerateStub<IConfiguration>();
    config.Stub(x => x.SettingA).Return("Fred");

如果您有兴趣在运行时更改默认的app.config。您可以使用Microsoft企业库配置块管理器进行配置。配置块非常容易测试。您好,更改AppSettings将不起作用,因为我实际上依赖于自定义配置节。我想在我的单元测试中使用不同的app.config,并让每个单元测试选择不同的app.config。谢谢您的快速回答。你能给我举个例子说明如何使用模拟框架来实现这一点吗,因为我对模拟框架还不熟悉。Kr,请注意,我使用的是ConfigurationManager,因此应该模拟的是这个对象,而不是?您可能会发现包装对ConfigurationManager的调用并模拟包装器更容易。我记得ConfigurationManager是一个静态类,这使得直接模拟变得更加困难。再次感谢您的反馈,但您能给我一个如何实现这一点的示例吗。因此,每个测试都应该有一个自定义配置部分,该部分与前一个测试中使用的部分不同。谢谢你的帮助。