2011-04-18 95 views
3

我在想这个。我创建了一个Complex类,仅用于娱乐(用于存储复数)并习惯于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.10sec。这是一个巨大的差异相比减法运算符:

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次,看它是不是只是一个呃逆或什么。

+5

你运行测试顺序?如果是这样,如果你换了测试订单,会发生什么? – 2011-04-18 07:41:29

+0

似乎没有直接的原因,为什么“+”操作比“ - ”操作需要更多的时间...... – sajoshi 2011-04-18 07:51:54

+0

如果按顺序执行它们,则执行第一次测试时会得到JIT编译的惩罚。 – Marius 2011-04-18 07:53:32

回答

0

好吧,我已经发现它是什么。

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

它仍然奇怪的是,R#加初始化时间第一次测试...