私は単体テストを書くのが初めてで、以下のシナリオのテストケースを書いているときに行き詰まりました。
Class A
{
public B createB(string name);
public B getB(string name);
public void removeB(B instance);
}
Class B
{
public B(string name);
}
特定の名前のインスタンスがすでに存在する場合、メソッドcreateB()
はnullを返します。したがって、ケースが正常に完了したB
ことをテストするには、電話をかけて存在するかどうかを確認してから、削除する必要があります。createB()
getB()
removeB()
A a = getInstanceOfA();
public void testCreateB()
{
B b = a.getB("B");
if (b != null)
{
a.removeB(b);
}
assertNotNull(a.createB("B"));
}
これは「テストケースは1つの理由だけで失敗しなければならない」というルールに違反しています。テストが失敗した場合、問題がどこから来ているのかわかりません。getB()
メソッドのテストについても同じですcreateB()
。テストを開始するための前提条件として呼び出す必要があります。JUnitを使用していますが、テストを開始するたびにテストケースがシャッフルされます。このシナリオでテストケースを確実に分離するためのベストプラクティスはありますか?
もう1つの注意点として、このgetInstanceOfA()
メソッドは別のライブラリから提供されるAPI呼び出しであり、の「クリーンな」インスタンスを取得することは制御できませんA
。