現在のコード プロジェクトを TDD に変換していて、あることに気付きました。
class Foo {
public event EventHandler Test;
public void SomeFunction() {
//snip...
Test(this, new EventArgs());
}
}
このコードをテストし、十分なテストがあるかどうかを判断するためにコード カバレッジ ツールに依存する場合、2 つの危険が見られます。
Test
イベントが発生するかどうかをテストする必要があります。これを忘れてしまうと、コード カバレッジ ツールだけではわかりません。- すぐに他の人に行きます。
この目的のために、スタートアップ関数にイベント ハンドラーを追加して、次のようにしました。
Foo test;
int eventCount;
[Startup] public void Init() {
test = new Foo();
// snip...
eventCount = 0;
test.Test += MyHandler;
}
void MyHandler(object sender, EventArgs e) { eventCount++; }
eventCount
これで、イベントが呼び出された場合、イベントが呼び出された回数を簡単に確認できます。かなりきれい。ここで、どのテストでも検出されない小さなバグを突き抜けました。つまり、SomeFunction()
イベントを呼び出そうとする前に、イベントにハンドラーがあるかどうかをチェックしません。これにより、null 逆参照が発生しますが、デフォルトですべてのテストにイベント ハンドラーがアタッチされているため、テストによってキャッチされることはありません。ただし、コード カバレッジ ツールは依然として完全なカバレッジを報告します。
これは手元にある私の「実世界の例」にすぎませんが、コードの 100% の「カバレッジ」があっても、これらの種類のエラーの多くがすり抜けてしまう可能性があることに気付きました。 . テストを書くとき、そのようなツールによって報告されたカバレッジを一粒の塩で取る必要がありますか? これらの穴を塞ぐ他の種類のツールはありますか?