C#でテスト駆動開発

C#でテスト駆動開発を使って保守性の高いプログラミングをする方法

「テスト駆動開発?」

「テストコード?」

 

まったくわからない方にも画像を使いながら丁寧に解説します。

このテスト駆動開発を学べば,
C#でよりよいアーキテクチャーでのコーディングが可能になり,
保守性の高いコードが書けるようになります。

テストコードとは?

テストコードとは,「ユニットテスト」と呼ばれるもので,
プログラミングが正しいかどうかを検証するコードの事です。
C#の開発環境では最近のVisual Studio2015などでは
標準で使用できます。

プログラムに対してテストコードを記述しておけば,
自動的にテストされ,OKかNGかを毎回教えてくれます。

何かの修正や機能追加でプログラムコードを変更したときに,
不具合が混入すればすぐに発見することができます。

近年ではテストコードを記述するのは当然であり,
テストコードのないプログラムは怖くて触れないコードという
扱いになっています。

昔はVBなどで作成していたころは,そんなことは気にせずに,
どんどんプログラミングしていましたが,
今のスタンダードはできるだけテストコードでカバーされている
プログラムを書くことがよい事とされています。

では実際にテストコードを書いてみましょう。

Visual Studio2017を使用しますが,
ユニットテストが書ければバージョンは何でも構いません。

単体テストプロジェクトの作成

「単体テストプロジェクト」を追加します。

ソリューション名は「TDD」

名前は「TDDTest.Tests」としています。

フォルダはお好きなところを選んでください。

次のようなコードが自動生成されます。

ここにテストコードを書いていくのですが,
テストする対象が必要です。
今作成したプロジェクトはテスト用のプロジェクトで
実際のアプリケーションを動作させるプログラムか記述しません。
実際のアプリケーションのプログラミングをするプロジェクトを
作成しましょう。

Windowsフォームプロジェクトの作成

今回はわかりやすくWindowsフォームで解説します。

それではWindowsフォームプロジェクトを作成しましょう。

名前は「TDD.Winform」とします。

フォームが作成されますが今は使いません。

Winformプロジェクトを右クリックして「追加」から
「新しいフォルダー」を選びます。

作成されたフォルダーの名前を「Objects」とします。

この作成されたObjectsフォルダーに「追加」から「クラス」を選んで

「Calculation」というクラスを作成します。

作成されたクラスに次のようなADDメソッドを追記します。

Addメソッドは引数のaとbの足し算をしてその値を返却します。

今からテストコードでこのコードが正しく動作しているかをテストしていきます。

参照の追加

Testsプロジェクトの参照を右クリックして「参照の追加」を選択します。

TDD.Winformにチェックをいれて「OK」を押下。

これでTestsプロジェクトから
Winformプロジェクトが参照できるようになりました。

テストコードの記述

それではテストコードを書いていきましょう。

とりあえずデフォルトで作成されている
テストファイル「UnitTest1.cs」に書きましょう。

これでCalculationクラスのAddメソッドに対して
テストコードが書けました。

「3プラス5は8になっているはず!」というテストコードになっています。

次の3行のうち,1行目と2行目は普通のクラスの使い方と同じです。

テストコード特有のものは3行目の「Assert.AreEqual(8, result);」の部分です。

「Assert.AreEqual」は第1引数と第2引数がイコールかどうかをチェックし,
テストエクスプローラーに成功か失敗かを示してくれます。

それではテストを実行してみましょう。

テストエクスプローラーの表示

ツールメニューの「テスト」から「ウィンドウ」を選択し
「テストエクスプローラー」を表示します。

表示出来たら「すべて実行」をクリックします。

緑色のレ点マークが出れば成功です。

これでAddメソッドは正しく動作していることが保証されました。

念のためNGになるかも見ておきましょう。

 

あえてテストを失敗させる

テストコードが誤っていればコードが正しくてもNGになります。

 

例えば「Assert.AreEqual(7, result);」など誤ったテストコードを
書いている場合はNGになります。もう一度「すべて実行」をクリックします。

赤い×マークになり失敗となっていますね。

下の方には失敗した原因も記されています。
今回はテストコードをあえて間違えて書きましたが,
通常はAddメソッド側に不具合がありNGになるケースと,
今回のようにテストコードを書き間違えているケースの2種類あります。

また,TestMethod1()の上に[TestMethod]という記述がありますが,
これは非常に大事です。これを書き忘れるとテストされません。
試しに一度削除してテストを実行してみましょう。

テストエクスプローラーに何も出てこなくなりました。

今回はテストが1件しかないのでおかしいことに気づけますが,
数百件などテスト結果が出ているときは気づかない恐れがあります。

テスト駆動開発