【问题标题】:Assembly context being changed in MStest- Possible to avoid?MStest 中更改的程序集上下文 - 可以避免吗?
【发布时间】:2009-09-18 21:38:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# visual-studio assemblies mstest


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您可以考虑采用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;
              }
          } 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多