.NETテストプログラミング入門
プログラミングはコンソールへHello World等の文字列を表示する事から始まります。そこでこの連載もHello Worldに相当するコードのテストから始めます。
ひとまず解答を掲載し、後で内容を解説します。
using System;
using System.IO;
class Piyo
{
public void Greeting()
{
Console.WriteLine( "おはピヨ♪" );
}
}
class Test
{
static void Main( string[] args )
{
//出力先を変えてテストを行いやすくする
TextWriter tmp = Console.Out;
StringWriter writer = new StringWriter();
Console.SetOut( writer );
//テスト対象を実行
Piyo target = new Piyo();
target.Greeting();
//出力値をテスト
string right = "おはピヨ♪" + Environment.NewLine;
bool result = writer.ToString().Equals( right );
//テスト結果を表示
Console.SetOut( tmp );
string message = result == true ? "テスト成功" : "テスト失敗";
Console.WriteLine( message );
}
}
※通常はNUnitなどでチェックしますが、この連載では読みやすいようにコンソールへテスト結果を表示しています。テスト対象であるPiyoクラスは、文字列をコンソールへ出力する単純なコードです。こんな単純なプログラムは目視チェックすればよいと考えるかもしれませんが、如何に単純に思えるコードであっても、テストコードでチェックしなければなりません。
何故ならば、Hello Worldは極端な例ですが、単純なコードは実際のプロジェクトに多々存在するからです。また、「単純さ」は人によって異なります。新人は殆どのコードを難しく感じ、熟練者は殆どのコードが簡単だと感じるでしょう。その様ないい加減な感覚を尺度にして集団作業である開発はできません。
単純なコードを放置すれば、コードカバレッジ(コード網羅率)が信用できなくなりますし、単純なコードを人間が一々目視でチェックするのは大変生産性が低い行為です。それに加え、「単純なコード」だからこそプログラマの集中力が途切れ、バグを埋め込む可能性があります。他にも理由は沢山ありますが長くなるので省略します。
従って、人間に任せるのは得策ではありません。テストプログラムをプログラミングすれば、お手軽に高速かつ正確にコンピュータがチェックしてくれます。
テストコードの内容については次回解説します。