繁体   English   中英

当我在多个项目解决方案上单击“运行所有测试”时,vs2012中的NUnit重用app.config?

[英]NUnit in vs2012 reusing app.config when i click “Run All Tests” on multiple project solution?

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

编辑 我忘记提及的一点是,TeamCity(我们的CI服务器)不会通过测试。 所以我当地的单元测试跑步者似乎做得很奇怪。

对于每个单元测试,您都可以像这样设置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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM