C# 在vs2012中单击“重新使用app.config”时取消禁用;“运行所有测试”;关于多项目解决方案?
我有一个visual studio 2012解决方案,其中包含两个项目projA和projB,以及两个测试项目projA_测试和projB_测试(使用NUnit)。ProjA和ProjB都有自己的app.config和自己的appsettings键/值对。当我单击“运行所有测试”时,projA单元测试将在projB单元测试之后运行。但是由于ConfigurationManager.AppSettings仅具有projA中app.config的值,一些projB单元测试失败!这是正常行为还是我的配置设置有问题 编辑。C# 在vs2012中单击“重新使用app.config”时取消禁用;“运行所有测试”;关于多项目解决方案?,c#,visual-studio-2012,.net-4.0,nunit,C#,Visual Studio 2012,.net 4.0,Nunit,我有一个visual studio 2012解决方案,其中包含两个项目projA和projB,以及两个测试项目projA_测试和projB_测试(使用NUnit)。ProjA和ProjB都有自己的app.config和自己的appsettings键/值对。当我单击“运行所有测试”时,projA单元测试将在projB单元测试之后运行。但是由于ConfigurationManager.AppSettings仅具有projA中app.config的值,一些projB单元测试失败!这是正常行为还是我的配
我忘记提到的一点是,TeamCity(我们的CI服务器)没有通过测试。因此,我的本地单元测试运行程序似乎在做一些奇怪的事情。对于每个单元测试,您只需设置
配置管理器的值即可
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
}
我唯一的问题是,我们已经有超过10000个这样编写的测试。我忘了提到的另一点是TeamCity(我们的CI服务器)没有通过测试。所以我本地的单元测试运行人员似乎在做一些奇怪的事情。。
ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings("Name", "ConnectionString"));