【VisualStudio チュートリアル】IntelliTest
チュートリアルは、Visual Studio 2015 RC で作成されています。
IntelliTest を使えば、あなたが書いたソースコードを解析して、テストデータと最大のコードカバレッジを持つ単体テストを作成することができます。早速体験してみましょう。
テスト対象クラスの作成
テスト対象となるクラスを作成します。Unit Test Projectを作成します。
今回はプロジェクト名をIntelliTestにしてみました。
プロジェクトが作成されたら、プロジェクト名の箇所(ここでは、IntelliTest)を右クリックして[追加]-[新しい項目]を選択します。
[クラス] を選択してください。今回はUserという名前のクラスを作成します。
クラスのテンプレートができたら次のようなコードを作成してください。
具体的なコードは次のようになります。
6行目にある「using System.Text.RegularExpressions」はデフォルトで追加されないので、記入忘れしないようにしてください。
このコードをレガシーコードと見立てて、実際に IntelliTest をしてみたいと思います。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; // ここは追加で記入してください。 namespace IntelliTest { public class User { public string Validate(string password) { if ((password.Length < 6) || (password.Length > 20)) return "パスワードは6文字以上20文字以内で設定してください。"; // 英語小文字と数字を含む文字列にマッチするパスワードを確認している if (Regex.IsMatch(password, "^(?!(?!.{4,8}$))[0-9a-z]*([0-9][a-z]|[a-z][0-9])+[0-9a-z]*$")) return "OK"; return "パスワードには数字、英字を両方含んでください"; } } } |
IntelliTest の実行
IntelliTest の実行は大変簡単です。
ユニットテストを作成したいメソッド [Validate] を選択して右クリックします。そこから[Run IntelliTest] を選択します。
作成されたテストケースをクリックすると詳細を見ることができます。
Visual Studio 2015はコード解析を行い、ホワイトボックステストを作成します。
作成されたテストケースを実際のテストコードにするときは、フロッピーディスクのアイコンの[保存] を選択します。
すると、UserTest.csというユニットテストクラスが作成されました。
これは回帰テストになりますので、何回でも繰り返し自動実行が可能になります。
レガシーコードの修正
よく見ると、テストケースで赤い部分があるようです。
IntelliTest はレガシーコードのコードの問題点も指摘してくれます。
この場合、どうやら、Validate メソッドの引数の password が null の場合の対応が抜けているということのようです。
User.cs を修正してみましょう。具体的なコードは次のようになります。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Text.RegularExpressions; // ここは追加で記入してください。 namespace IntelliTest { public class User { public string Validate(string password) { if(null == password) return "null にパスワードは認められていません"; //追加箇所 if ((password.Length < 6) || (password.Length > 20)) return "パスワードは6文字以上20文字以内で設定してください。"; // 英語小文字と数字を含む文字列にマッチするパスワードを確認している if (Regex.IsMatch(password, "^(?!(?!.{4,8}$))[0-9a-z]*([0-9][a-z]|[a-z][0-9])+[0-9a-z]*$")) return "OK"; return "パスワードには数字、英字を両方含んでください"; } } } |
次に IntelliTest で作成したユニットテストを実行してみましょう。
メニューの[テスト] – [実行] – [全てのテスト] を選択すると、すべてのテストが実行されます。
今回はすべてグリーン、つまりすべてのテストがパスしました。
テストはすべて通りましたが、よく見ると、先ほどの IntelliTest のウィンドウを見ると警告がでています。
警告の右横のプルダウンを、テストからイベントに変更してみると、内容がわかるようになります。
このWarnings の修正は簡単です。煉瓦に緑のレ点が入ったような [修正] のアイコンをクリックしましょう。
これはテストコードですが、図の 「MaxRunsWithoutNewTests」 という項目が自動修正されています。
カバレッジを確認する
最後に IntelliTest で作成したテストのカバレッジを見てみます。
メニューの [テスト] – [コードカバレッジの分析] – [全てのテスト] を選択します。カバレッジが100%でした。
毎回100%になるわけではありませんが、IntelliTest は高いカバレッジ率のコードを生成することが確認できました。
本コードを確認するかぎり、ここでいうカバレッジは C0 カバレッジ(コードカバレッジ)と思われます。
終わりに
楽しんでいただけましたでしょうか?
Visual Studio 2015を用いて IntelliTest を使うと、とても簡単に網羅率の高いテストを生成することができます。
特にテストコードがないレガシーコードに対して大変有効だと思われます。ぜひ皆様のプロジェクトにお役立てください。
参考
より、深いIntelliTest の内容は下記の記事や動画をご覧ください。
コードのためにスマート単体テストを生成する
https://msdn.microsoft.com/library/dn823749(v=vs.140).aspx
Using Smart Unit Tests To Find Bugs Earlier In The Development Cycle Using Smart Unit Tests To Find Bugs Earlier In The Development Cycle Using Smart Unit Tests To Find Bugs Earlier In The Development CycleUsing Smart Unit Tests To Find Bugs Earlier In The Development Cycle (英語)
https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/215?wt.mc_id=relatedsession