在MStest中更改装配环境 - 可以避免吗?

时间:2009-09-18 21:38:12

标签: c# visual-studio assemblies mstest

我正在尝试在代码库中使用MSTest。现在我遇到了不同的问题。

我们隐式使用Microsoft.Practices.EnterpriseLibrary.Data中的_getDefaultName,它获取当前程序集 App.config中的默认连接字符串。由于此测试项目将是新的程序集/项目,因此无法在源项目中找到连接字符串。

我可以通过硬编码连接字符串或在源代码中显式提供App.config的路径来避免这种情况。

但我不想为了测试代码而更改源代码,那么有没有办法指定或更改当前运行的程序集?

如果我使用任何其他测试框架,我的生活会变得简单吗?

2 个答案:

答案 0 :(得分:0)

好吧,如果你使用其他测试框架,你的生活可能会更简单;)(我使用并喜欢NUnit),但这不太可能解决这个问题。

我建议只将App.config数据复制到单元测试程序集中。您可能想要更改它,因为您可能不希望您的测试针对生产数据库运行。

如果您想进行单元测试(而不是集成测试),请考虑编写完全不访问数据库的测试。这通常通过使用分层体系结构,依赖注入和隔离(模拟对象)框架来实现。关于SO的这些个别主题有很多;如果您有兴趣但是无法找到资源,请发表评论。

答案 1 :(得分:0)

您可以将方法视为outlined in another post。我在该链接中选择了一个示例,并将其更改为您的情况:

    public static class Context
    {
        private static string ConnectString;

        public static string Connect
        {
            get { return ConnectString ?? DataFactory.instance; }
            set { ConnectString= value; }
        }

        private class DataFactory
        {
            static DataFactory() { }
            internal static readonly string instance
                   = EntLib.Data._getDefaultName;
        }
    } 

现在,当生产代码运行时,它从App.Config文件中获取EntLib的配置。但是当您运行mstest代码时,请确保在测试程序集的任何部分之前将所需的连接字符串注入Context.Connect。