Я читаю книгу «Искусство модульного тестирования» и пытаюсь понять логику тестирования на основе состояния. В примере с предметом был класс калькулятора, например
public class Calculator
{
private int sum=0;
public void Add(int number)
{
sum+=number;
}
public int Sum()
{
int temp = sum;
sum = 0;
return temp;
}
}
, и книга показывает, как мы можем проверить это как:
[TestFixture]
public class CalculatorTests
{
private Calculator calc;
[SetUp]
public void Setup()
{
calc = new Calculator();
}
[Test]
public void Sum_NoAddCalls_DefaultsToZero()
{
int lastSum = calc.Sum();
Assert.AreEqual(0,lastSum);
}
[Test]
public void Add_CalledOnce_SavesNumberForSum()
{
calc.Add(1);
int lastSum = calc.Sum();
Assert.AreEqual(1,lastSum);
}
[Test]
public void Sum_AfterCall_ResetsToZero()
{
calc.Add(1);
calc.Sum();
int lastSum = calc.Sum();
Assert.AreEqual(0, lastSum);
}
}
Итак, до этого все было отлично, но, скажем, я пишу класс калькулятора столько же, сколько этот класс, и я создал метод, подобный
public int Sum()
{
return sum;
}
и
Тестовый класс, подобный
[TestFixture]
public class CalculatorTests
{
private Calculator calc;
[SetUp]
public void Setup()
{
calc = new Calculator();
}
[Test]
public void Sum_NoAddCalls_DefaultsToZero()
{
int lastSum = calc.Sum();
Assert.AreEqual(0,lastSum);
}
[Test]
public void Add_CalledOnce_SavesNumberForSum()
{
calc.Add(1);
int lastSum = calc.Sum();
Assert.AreEqual(1,lastSum);
}
}
Допустим, я плохо осознавал, когда пишу код и когда пишу модульный тест для этого Как я могу обнаружить следующую ошибку?Потому что ошибка в том, что сумма не будет равна нулю после добавления 2 метода, как в следующих процессах
add(1)
add(23)
sum() is 24 now
add(11)
add(12)
sum() => will be 47 but it has to be 23.
Так, как я думаю, чтобы получить эту логическую ошибку, когда я пишу модульный тест.это ошибка) тогда я вернусь и увижу точку, и я изменю класс калькулятора как
public int Sum()
{
int temp = sum;
sum = 0;
return temp;
}
Я надеюсь, вы понимаете, что я пытаюсь сказать.
Спасибо.