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次,看它是不是只是一个呃逆或什么。
你运行测试顺序?如果是这样,如果你换了测试订单,会发生什么? – 2011-04-18 07:41:29
似乎没有直接的原因,为什么“+”操作比“ - ”操作需要更多的时间...... – sajoshi 2011-04-18 07:51:54
如果按顺序执行它们,则执行第一次测试时会得到JIT编译的惩罚。 – Marius 2011-04-18 07:53:32