ユニットテストの帳簿を読んで、状態ベースのテストロジックを理解しようとしました。件名の例では、ユニットテスト中のクラスで論理ミスを指摘する方法を確認する
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);
}
}
だからこれまで、すべてが素晴らしいですが、私はそのクラスと同じくらい電卓クラスを書いmは言うことができます、と私は
のような方法を作りました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);
}
}
ようレッツ私はそのためのユニットテストを書くとき、私はそれ以下のバグをキャッチどのようにコードを書くとき、私は良いリアライズをdidntの言いますか?バグは次のような2 addメソッドは、私はユニットテストを書くとき、その論理ミスを取得すると思いますそれでは、どのよう
add(1)
add(23)
sum() is 24 now
add(11)
add(12)
sum() => will be 47 but it has to be 23.
を処理した後、その和がゼロではありませんですので。(私はそれを書く場合はNUnitのは、私に教えてくれるがあります間違い)それから私は戻ってくると私はあなたが私が言うことをしようと何を理解してほしいポイントが表示され、私は
public int Sum()
{
int temp = sum;
sum = 0;
return temp;
}
のような電卓クラスを変更します。
ありがとうございます。
かなり確実ではありませんの?あなたはそのテストを書く方法を尋ねていますか?または、あなたがそれらのためのテストを書くことができるように起こりうるすべての最悪の事例について、どのように考えていますか? –