Мне было интересно. Я создал класс 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,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 раз, чтобы убедиться, что это не просто сбой или что-то в этом роде.