C# 为什么这个单元测试是这样的;“慢”;

C# 为什么这个单元测试是这样的;“慢”;,c#,unit-testing,C#,Unit Testing,我在想这个。我创建了一个复杂的类只是为了好玩(存储复数)和习惯TDD 我编写了以下测试: [TestMethod] [TestCategory("COMPLEX_OPERATOR")] public void ComplexAdditionWorks() { var c1 = new Complex(1.5, 3.0); var c2 = new Complex(3.0, 2.5); var cOutcome =

我在想这个。我创建了一个复杂的类只是为了好玩(存储复数)和习惯TDD

我编写了以下测试:

    [TestMethod]
    [TestCategory("COMPLEX_OPERATOR")]
    public void ComplexAdditionWorks()
    {
        var c1 = new Complex(1.5, 3.0);
        var c2 = new Complex(3.0, 2.5);

        var cOutcome = c1 + c2;

        var cExpected = new Complex(4.5, 5.5);

        Assert.AreEqual(cOutcome, cExpected);
    }
这就是实现:

    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary);
    }
但是,此单元测试的运行时间相对较慢,为0.10秒。与减法运算符相比,这是一个巨大的差异:

  public static Complex operator -(Complex c1, Complex c2)
    {
        return new Complex(c1.Real - c2.Real, c1.Imaginary - c2.Imaginary);
    }
使用可比单元测试:

    [TestMethod]
    [TestCategory("COMPLEX_OPERATOR")]
    public void ComplexSubstractionWorks()
    {
        var c1 = new Complex(3.0, 2.5);
        var c2 = new Complex(1.0, 1.5);

        var cOutcome = c1 - c2;

        var cExpected = new Complex(2.0, 1.0);

        Assert.AreEqual(cOutcome, cExpected);
    }
但是这个运行速度非常快(单元测试说是0.00秒)

为什么加法运算符/单元测试在这里如此缓慢


顺便说一句,我做了20次单元测试,看看这是否只是个小问题

好的,我已经知道了

只是
public void ComplexAdditionWorks()
是第一个运行的测试。我以为它们会按照程序的顺序运行,但它是按字母顺序排列的


仍然奇怪的是,R#将初始化时间添加到第一个测试中…

是否按顺序运行测试?如果是这样,如果交换测试顺序会发生什么?似乎没有直接的原因说明“+”操作比“-”操作花费更多的时间……如果按顺序运行它们,则在执行第一个测试时会受到JIT编译的惩罚。您可能想尝试添加一个循环(例如,下一个循环)在两种测试方法中运行测试代码1000次。如果您仍然看到测试的执行时间有很大的差异,那么您确实有一个问题。如果不是,则可能是以前的测试有问题,或者可能与测试平台或CLR有关。请给出复杂的类型定义。它是类还是结构?