この記事は、
初心者のためのC#プログラミング本格入門109の続きです。前回は、親の定義を有効利用して、便利なオブジェクトを作る方法について解説しました。今回は、エラーを発生させてテストプログラムをチェックする方法を解説します。
前回、オリジナルの例外を簡単にスローできるようになりました。しかし、本当にうまくいくのかチェックしていません。ありがちな盲点と言えます。テストプログラム自身をチェックしないと、本当にテストプログラムが正しいのかわかりません。もし、
テストプログラムが間違っていると、バグが生まれます。絶対にテストプログラムのチェックを忘れてはなりません。
では、どうやってテストプログラムをテストするのでしょうか?テストプログラムのテストプログラムを作ると思いがちですが、ならばそのテストプログラムのテストプログラムの妥当性をどうやってチェックするのでしょうか?この方法では永遠に終わりません。初心者の方はこの事で困るようです。プロの人でも、「だからテストはやらない」と逃げる人すらいます。
すごく難題のように見えますが、解決方法は簡単です。
自分でエラーを発生させればいいのです。この方法はコストもかからず、納期に追われているときでも実行できます。実際にやってみましょう。
//関係のないプログラムは省略
partial class SimpleList
{
//ここを修正するだけでOK
public int Count
{
get { return 0; }
}
}
たった1行変えるだけでエラーを発生できます。このように、
テストが何をチェックするのかを意識していればエラーを発生させるのも簡単です。逆に何をチェックしているのかわからないときは、エラーを発生させられません。この行為は、
自分は何をテストしたいのかをはっきりさせる意味があります。
さっそくテストを実行してエラーを発生させましょう。そうすると、例外処理がスローされた行でプログラムがストップします。これは、例外をキャッチするプログラムが用意されていないからです。復習を兼ねてキャッチするプログラムを打ちましょう。
//関係のないプログラムは省略
class SimpleListTest : Test
{
public override void ExecuteAllTest()
{
try
{
this.OneElementAdd( );
this.CurrentTest( );
this.AddElementCheck( );
this.ForeEachTest( );
this.ForeEachTest2( );
this.OneElementRemove( );
this.EnumeratorWhenRemoveElement( );
}
catch ( TestFail e )
{
base.Error( e.Message );
}
}
}
これでプログラムがストップしません。なお、try文の{}(波括弧)の位置は自由に変えられます。次のように書いてもOKです。
//関係のないプログラムは省略
class SimpleListTest : Test
{
public override void ExecuteAllTest()
{
try {
this.OneElementAdd( );
this.CurrentTest( );
this.AddElementCheck( );
this.ForeEachTest( );
this.ForeEachTest2( );
this.OneElementRemove( );
this.EnumeratorWhenRemoveElement( );
} catch ( TestFail e ) {
base.Error( e.Message );
}
}
}
どっちにするのかは好み次第です。ただし、一度決めたらどちらか一方のスタイルを使った方がよいです。何故ならば、あとで統一したほうが読みやすくなるからです。プログラミングをするときは、後で読みやすいように注意しましょう。
今回は、テストプログラムそのものをチェックする方法を解説しました。テストプログラムを、チェックする行為は忘れやすいので十分に注意しましょう。
テーマ : プログラミング
ジャンル : コンピュータ