当Visual Studio运行单元测试时,它会同时运行多个测试。测试类的运行范围究竟是什么?它们是在单独的应用程序域中运行还是共享数据?
例如,如果我有以下测试类:
[TestClass]
public class FooTests
{
Mock<ISomeInterface1> _complexMock1;
Mock<ISomeInterface2> _complexMock2;
public void CreateComplexMocks()
{
//set up _complexMock1 & _complexMock2
}
[TestMethod]
public void Test1()
{
CreateComplexMocks();
//use _complexMock1 & _complexMock2 in test
}
[TestMethod]
public void Test2()
{
CreateComplexMocks();
//use _complexMock1 & _complexMock2 in test
}
}
测试使用CreateComplexMocks()
助手构建一些模拟。这些是作为成员公开而不是被传递回测试(在现实世界的例子中可能会有更多)
我的问题是,如果两个测试同时运行,他们会分享_complexMock1
和_complexMock2
的状态吗?
如果complexMocks是静态的怎么办?
答案 0 :(得分:2)
找到this blog之后,似乎在不同的线程上为每个测试实例化了一个单独的测试类。
因此不会共享实例成员,但静态成员将会共享。
答案 1 :(得分:1)
在您的示例中,您应该在[TestInitialize]方法中创建模拟 每次测试运行时,你的模拟都会再次创建。
[TestInitialize]
public void TestInit()
{
CreateComplexMocks();
}