【问题标题】:NUnit in vs2012 reusing app.config when i click "Run All Tests" on multiple project solution?当我在多个项目解决方案上单击“运行所有测试”时,vs2012 中的 NUnit 重用 app.config?
【发布时间】:2014-09-04 23:00:33
【问题描述】:

我有一个 Visual Studio 2012 解决方案,其中包含 2 个项目 projA 和 projB,以及 2 个测试项目 projA_test 和 projB_test(使用 NUnit)。 ProjA 和 ProjB 都有自己的 app.config 和自己的 appsettings 键/值对。当我单击运行所有测试时,会运行 projA 单元测试,然后运行 ​​projB 单元测试。但是一些 projB 单元测试失败了,因为 ConfigurationManager.AppSettings 只有来自 projA 的 app.config 的值!这是正常行为还是我的一些配置设置搞砸了?

编辑。 我忘记提到的一点是 TeamCity(我们的 CI 服务器)不会通过测试。所以我本地的单元测试运行器似乎在做一些奇怪的事情..

【问题讨论】:

    标签: c# visual-studio-2012 .net-4.0 nunit


    【解决方案1】:

    对于每个单元测试,您只需设置 ConfigurationManager 的值即可。

    ConfigurationManager.AppSettings["YourKey"] = YourValue;
    

    如果您在需要这些值的对象之前执行此操作,它们将正常工作。如果它们的值用于多个测试,您可以在 testfixture 设置方法中进行。

    详细示例

    类:

    public class SomeClass
    {
        #region Properties
    
        public string Value { get; private set; }
    
        #endregion Properites
    
        #region Constructors
    
        public SomeClass()
        {
            Value = ConfigurationManager.AppSettings["DatValue"];
        }
    
        #endregion Constructors
    }
    

    测试:我知道这是 MSTest/FluentAssertion 但概念应该是一样的

        [TestMethod]
        public void Example()
        {
            #region Arrange
    
            ConfigurationManager.AppSettings["DatValue"] = "Batman";
    
            #endregion Arrange
    
            #region Act
    
            var someClass = new SomeClass();
    
            #endregion Act
    
            #region Assert
    
            someClass.Should().NotBeNull();
            someClass.Should().BeOfType<SomeClass>();
            someClass.Value.Should().BeEquivalentTo("Batman");
    
            #endregion Assert
        }
    

    这个测试在我刚刚制作的示例中通过,并且没有可用的 app.config 文件。单元测试不应该依赖于 app.config,否则你会开始从单元测试转向集成测试。

    请注意,ConnectionStrings 有点不同。您可以像这样将这些添加到ConfigurationManager

    ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings("Name", "ConnectionString"));
    

    【讨论】:

    • 我唯一的问题是我们已经有 > 10,000 个这样编写的测试。我忘了提到的另一点是 TeamCity(我们的 CI 服务器)没有通过测试。所以我本地的单元测试运行器似乎在做一些奇怪的事情..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    相关资源
    最近更新 更多