[VS2017新機能] 単体テストを書いてみよう!Live Unit Testing を試してみる手順書

Microsoft の最新のIDE Visual Studio 2017 に、新機能のLive Unit Testing(ライブ ユニット テスト)の機能が導入されました。
Live Unit Testingでは、コードの編集中にバックグラウンドで影響範囲のユニットテストが実行され、
その結果やテスト範囲がリアルタイムでエディターにわかりやすく表示されます。
コード変更の既存テストへの影響のほか、新たに追加したコードが既存のテスト範囲でカバーされているかどうかも即座にフィードバックされます。このため、バグの修正や機能の追加の際に、ユニットテストの作成が必要かどうかを把握できます。

(Visual Studio 2017 については、こちらで無料でインストールできます。(Windowsのみ))

screen-shot-2017-02-16-at-23-36-37

この記事では、そのLive Unit Testingの機能の紹介の他に、
単体テストの書き方も、丁寧に解説しながらご紹介します!(スクショたくさん撮りながら丁寧に書いたから、すごい時間かかった…明日デベロッパーサミットで登壇なのに…)

一生懸命書いたので、ぜひご覧ください!

(このLive Unit Testingの機能は Enterprise エディションでの提供です)

このエントリーをはてなブックマークに追加

目次

  1. 手順1「テストを書く準備が整うまで」
  2. 手順2「テスト対象の実装」
  3. 手順3「テストを書く」
  4. 手順4「テストを動かしてみる!Live Unit Testing」
  5. 手順5「テストケースを1つ増やしてみる」
  6. 参考

手順1「テストを書く準備が整うまで」

↓ プロジェクトの新規作成

screen-shot-2017-02-16-at-23-15-13

↓ コンソールアプリを選択し、名前をつけて「OK」しましょう。
(この例では LiveUnitTestSampleと命名しました。)

screen-shot-2017-02-16-at-23-13-36

↓ このような画面になります。空っぽの Main 関数があるだけです

screen-shot-2017-02-16-at-20-25-13

↓ ユニットテストのプロジェクトも追加しましょう。

右の「ソリューションエクスプローラー」で、
ソリューションを右クリック→「追加」→「新しいプロジェクト」

screen-shot-2017-02-16-at-20-25-24

↓ 左のテンプレートカラムから
「テスト」→「単体テストプロジェクト (.NET Framework)」→(名前編集)→「OK」
(この例では 名前考えるの面倒で デフォルトのままの UnitTestProject1と命名しました。)

screen-shot-2017-02-16-at-20-25-55

↓ このような画面になります

screen-shot-2017-02-16-at-20-26-30

↓ この単体テストプロジェクトが、最初に作った LiveUnitTestSampleプロジェクト(テストされる側のプロジェクト)を参照できるようにしましょう。

「参照」を右クリック→「参照の追加」

screen-shot-2017-02-16-at-20-27-46

↓ 最初に作った LiveUnitTestSampleプロジェクトにチェックを入れて「OK」

screen-shot-2017-02-16-at-20-28-02

↓ ちゃんと「参照」に追加されたことを確認

screen-shot-2017-02-16-at-20-28-29

ここまでで、一応、単体テストは実行できます。(まだ中身ありませんが。)

続いて、テスト対象の実装と、テストの中身を書いてみましょう。

手順2「テスト対象の実装」

今回は単体テストを試してみたいので、
取り敢えず、簡単な、テストされる対象のクラス&メソッドを用意しましょう。「Add(int,int)」という簡単な足し算メソッドを作ることにします

↓ ソリューションエクスプローラーの LiveUnitTestSampleプロジェクトを右クリック→「追加」→「新しい項目」

screen-shot-2017-02-16-at-23-47-06

↓ 「Calc.cs」という名前のクラスを作りましょう

screen-shot-2017-02-16-at-20-37-42

新規作成された Calc クラスに、
足し算メソッドAdd(int,int)を追記しましょう。

screen-shot-2017-02-16-at-20-40-59

最初はテスト失敗のケースを見たいので、
=> x + y;
とは書かず、

=> 1;
でいきましょう。

これでテスト対象は一応用意できたので、
続いて、テストを書いてみましょう。

手順3「テストを書く」

テストは

「こうなってるはずだ」の値と
「実際に動かしてみた結果」の値を

比べて、
「同じだった」「違った」で算出します。

ということで、さっき書いた Add関数のテストを書いてみましょう。

右のソリューションエクスプローラーから「UnitTest1.cs」をダブルクリックし、開きます。

↓ このコードを書きます

取り敢えずテストケースを1つ書きました。

Assert.AreEqual(expected: 正しい値, actual: 実際の計算結果);

という書き方です。
一致していたら「成功」、一致していなかったら「失敗」を返します。

このテストケースでは

Add(2, 3) を計算したら 5 になっているはずだよね

ということを言っています。

でもさっき Add(int,int) を定義した時、必ず 1 を返すように作ったので、このテストは「失敗」するはずですね。

実際に動かしてみましょう

手順4「テストを動かしてみる!Live Unit Testing」

取り敢えず「テストエクスプローラ」を表示させておきましょう。便利なので。

screen-shot-2017-02-16-at-20-36-44

そして、いよいよLive Unit Testingを実行します!

screen-shot-2017-02-16-at-20-28-55

どうなるでしょうか!

screen-shot-2017-02-16-at-20-43-36

予想通り、失敗しましたね!テスト失敗です

↓ 左の「テストエクスプローラ」には、テスト結果一覧(現在1つしか無いので1つだけ)が表示されています

screen-shot-2017-02-16-at-20-43-362

手順5「テストケースを1つ増やしてみる」

現状把握!

↓ 現在、こうなっていますね。テストは失敗しています

screen-shot-2017-02-16-at-20-44-11

↓ ためしにテストを成功させてみましょう。Add関数が返す値を 1から 5に書き換えてみます。

screen-shot-2017-02-16-at-20-44-31

↑(クリックで拡大)

テストケースが1つしか無いので、もうひとつ増やしてみましょう。

↓ そうすると、このようになります。(クリックで拡大)

screen-shot-2017-02-17-at-0-58-48

↓ 解説を入れた板(クリックで拡大)

screen-shot-2017-02-16-at-20-46-52

テストメソッド、1つ目は成功し、2つ目は失敗しています。

// 成功
Assert.AreEqual(expected: 5, actual: Calc.Add(2, 3));
// 失敗
Assert.AreEqual(expected: 9, actual: Calc.Add(4, 5));

なので、この Add(int,int) 関数にはバグがあることがわかります。修正しましょう。

screen-shot-2017-02-17-at-1-04-50

↓ 良いですね!テストは全て「成功」しました!
screen-shot-2017-02-17-at-1-06-18

以上です

Visual Studio 2017 を試してみよう!

無料でインストールできます!

screen-shot-2017-02-17-at-1-42-51

参考