C# 以顺序而不是并行方式运行的测试用例
我在谷歌上搜索这个问题,但找不到答案 我的测试运行似乎并行运行,并导致彼此失败。它们单独运行时都会通过。我试着在测试中添加线程,让他们睡觉,但没有运气 有没有办法依次运行这些测试? 我的环境: VisualStudio2010C# 以顺序而不是并行方式运行的测试用例,c#,visual-studio-2010,tdd,resharper-6.1,C#,Visual Studio 2010,Tdd,Resharper 6.1,我在谷歌上搜索这个问题,但找不到答案 我的测试运行似乎并行运行,并导致彼此失败。它们单独运行时都会通过。我试着在测试中添加线程,让他们睡觉,但没有运气 有没有办法依次运行这些测试? 我的环境: VisualStudio2010 Resharper Jet brains 6.1我建议您进行确定性的单元测试。也就是说,它们不依赖于运行顺序,也不依赖于在之前或之后运行其他测试。不这样做会导致失败。大多数测试运行者基于测试方法完全独立这一事实 从调用测试类的方法的方式来看,这一事实本质上是显而易见的。e
Resharper Jet brains 6.1我建议您进行确定性的单元测试。也就是说,它们不依赖于运行顺序,也不依赖于在之前或之后运行其他测试。不这样做会导致失败。大多数测试运行者基于测试方法完全独立这一事实 从调用测试类的方法的方式来看,这一事实本质上是显而易见的。e、 g.使用MS Test,您可以拥有程序集、类和测试初始化方法。所有这些都是为每个被调用的TestMethod调用的。例如,对于以下类:
[TestClass()]
public class DivideClassTest
{
[AssemblyInitialize()]
public static void AssemblyInit(TestContext context)
{
Console.WriteLine("Assembly Init");
}
[ClassInitialize()]
public static void ClassInit(TestContext context)
{
Console.WriteLine("ClassInit");
}
[TestInitialize()]
public void Initialize()
{
Console.WriteLine("TestMethodInit");
}
[TestCleanup()]
public void Cleanup()
{
Console.WriteLine("TestMethodCleanup");
}
[ClassCleanup()]
public static void ClassCleanup()
{
Console.WriteLine("ClassCleanup");
}
[AssemblyCleanup()]
public static void AssemblyCleanup()
{
Console.WriteLine("AssemblyCleanup");
}
[TestMethod()]
public void Test1()
{
Console.WriteLine("Test1");
}
[TestMethod()]
public void Test2()
{
Console.WriteLine("Test2");
}
}
您将看到如下输出
Assembly Init
ClassInit
TestMethodInit
Test1
TestMethodCleanup
TestMethodInit
Test2
TestMethodCleanup
ClassCleanup
AssemblyCleanup
虽然有一个“Test”类,但TestMethod本身被认为是测试。一个“测试”类可以有效地进行许多测试。我建议您使用确定性的单元测试。也就是说,它们不依赖于运行顺序,也不依赖于在之前或之后运行其他测试。不这样做会导致失败。大多数测试运行者基于测试方法完全独立这一事实 从调用测试类的方法的方式来看,这一事实本质上是显而易见的。e、 g.使用MS Test,您可以拥有程序集、类和测试初始化方法。所有这些都是为每个被调用的TestMethod调用的。例如,对于以下类:
[TestClass()]
public class DivideClassTest
{
[AssemblyInitialize()]
public static void AssemblyInit(TestContext context)
{
Console.WriteLine("Assembly Init");
}
[ClassInitialize()]
public static void ClassInit(TestContext context)
{
Console.WriteLine("ClassInit");
}
[TestInitialize()]
public void Initialize()
{
Console.WriteLine("TestMethodInit");
}
[TestCleanup()]
public void Cleanup()
{
Console.WriteLine("TestMethodCleanup");
}
[ClassCleanup()]
public static void ClassCleanup()
{
Console.WriteLine("ClassCleanup");
}
[AssemblyCleanup()]
public static void AssemblyCleanup()
{
Console.WriteLine("AssemblyCleanup");
}
[TestMethod()]
public void Test1()
{
Console.WriteLine("Test1");
}
[TestMethod()]
public void Test2()
{
Console.WriteLine("Test2");
}
}
您将看到如下输出
Assembly Init
ClassInit
TestMethodInit
Test1
TestMethodCleanup
TestMethodInit
Test2
TestMethodCleanup
ClassCleanup
AssemblyCleanup
虽然有一个“Test”类,但TestMethod本身被认为是测试。“test”类可以有效地进行许多测试。我觉得您在某个地方有静态数据,这些数据从一个测试持续到另一个测试,这可能是问题的根本原因。正如Peter Ritchie所建议的那样,您应该重写代码/测试,这样静态依赖性就不会影响其他测试。我在最初的一些测试中也犯了这个错误。我将在Test1中的DB中设置一个值,然后Test2将期望在那里。这是一个灾难的配方。可能重复的声音对我来说,你有某个地方的静态数据,从一个测试到另一个,这可能是你的问题的根本原因。正如Peter Ritchie所建议的那样,您应该重写代码/测试,这样静态依赖性就不会影响其他测试。我在最初的一些测试中也犯了这个错误。我将在Test1中的DB中设置一个值,然后Test2将期望在那里。这是造成灾难的原因。可能是