IntelliTestはどこまでカバーしてくれるのか

公開日: : Blog, Microsoft , ,

私はレガシーな開発環境・案件が多かったのですが、
この頃、ユニットテストを利用する機会が増えてきました。

Visual Studio 2015 の IntelliTest という機能を使用すると、
ユニットテストの自動作成が可能です。

どんなもんなのかということで、使ってみました。

※IntelliTestはEnterpriseエディションのみの機能です。

まずは、適当なクラスとメソッドを作成。
文字列3つを渡して色々数値変換やって計算結果を返します。

public int GetHoge(string a, string b, string c)
{
    //文字列変数 a の長さ
    var lenA = a.Length;

    //文字列変数 b の先頭2文字を数字変換したもの
    var lenB = int.Parse(b.Substring(0, 2));

    //文字列変数 c の長さ
    var lenC = c.Length;

    //計算
    return lenA * lenB / lenC;
}

メソッドを右クリック、「IntelliTestの実行」から即座にテストが実行できます。
※即座といっても数秒かかります。

Run

こんな感じになりました。
例外は、明示的にスローしたもの以外はテスト失敗(RED)となります。

Result1

まずは、引数のNullチェックから行ってみます。

public int GetHoge(string a, string b, string c)
{
    //文字列変数 a の長さ
    if (a == null) throw new ArgumentNullException("a is null.");
    var lenA = a.Length;

    //文字列変数 b の先頭2文字を数字変換したもの
    if (b == null) throw new ArgumentNullException("b is null.");
    var lenB = int.Parse(b.Substring(0, 2));

    //文字列変数 c の長さ
    if (c == null) throw new ArgumentNullException("c is null.");
    var lenC = c.Length;

    //計算
    return lenA * lenB / lenC;
}

これで引数nullパターンは対策が出来ました。

Result2

次は、引数bの先頭2文字を数値変換しているのですが、
文字長・数字チェックを追加する必要がありそうです。
ちゃんとSubstringメソッドに応じて、境界値でユニットテストを自動実行してくれているのが凄いですね。

public int GetHoge(string a, string b, string c)
{
    //文字列変数 a の長さ
    if (a == null) throw new ArgumentNullException("a is null.");
    var lenA = a.Length;

    //文字列変数 b の先頭2文字を数字変換したもの
    if (b == null) throw new ArgumentNullException("b is null.");
    if (b.Length < 2) throw new ArgumentException("b.Length < 2.");
    int tmpB;
    if (!int.TryParse(b.Substring(0, 2), out tmpB)) throw new ArgumentException("b is not numeric.");
    var lenB = int.Parse(b.Substring(0, 2));

    //文字列変数 c の長さ
    if (c == null) throw new ArgumentNullException("c is null.");
    var lenC = c.Length;

    //計算
    return lenA * lenB / lenC;
}

Result3

最後は0除算の対応を追加しました。

public int GetHoge(string a, string b, string c)
{
    //文字列変数 a の長さ
    if (a == null) throw new ArgumentNullException("a is null.");
    var lenA = a.Length;

    //文字列変数 b の先頭2文字を数字変換したもの
    if (b == null) throw new ArgumentNullException("b is null.");
    if (b.Length < 2) throw new ArgumentException("b.Length < 2.");
    int tmpB;
    if (!int.TryParse(b.Substring(0, 2), out tmpB)) throw new ArgumentException("b is not numeric.");
    var lenB = int.Parse(b.Substring(0, 2));

    //文字列変数 c の長さ
    if (c == null) throw new ArgumentNullException("c is null.");
    var lenC = c.Length;
    if (lenC == 0) throw new ArgumentException("c is 0.");

    //計算
    return lenA * lenB / lenC;
}

ALLグリーンになり、メソッドが少し堅牢になったでしょうか。

Result4

どこまで自動実行してくれるのかまだ把握できてないですが、
実装に応じた異常系はある程度網羅できそうな気がします。当然ながらビジネスロジックの仕様網羅はしてくれないです。

もう少し触ってみたいですけど、
テスト駆動開発をやっているチームよりも、ユニットテストを作成する文化が無いまたは製造後にユニットテストを作成するチームに対して有効かもしれません。
もしくはユニットテストを作成する際はビジネスロジックの網羅テストを作成し、異常系についてはIntelliTestに任せる、などのアプローチもできるかもしれません。
そうするとユニットテスト作成の時間がかなり短縮できそうですね。

関連記事

【ストアアプリ】画面遷移の基本①

こんにちは。 Windowsストアアプリをぼちぼち触り始めています。 WindowsRuntim

記事を読む

【XAML】フォントサイズを自動縮小して全体を表示

Viewboxを親にするだけ。 拡大・縮小方法はStretch, StretchDirec

記事を読む

no image

【TFS2013】Visual Studio 2005 Professional から TFS2013へ接続

こんにちは。 私の周りではいまだにレガシーな開発環境を使いつづけているプロジェクトが多いです。

記事を読む

【ストアアプリ】画像の光学式ズーム

こんにちは。 スマートデバイスといえばタッチ操作、ということで 今日はWindowsストアアプリ

記事を読む

Package ‘Win10SDK_10.0.14393.33,version=10.0.14393.3300’ failed to install.

Visual Studio 2017 RC1 でUWPアプリケーションのコンポーネントインストールす

記事を読む

Xamarin iOS, Android での位置情報、Bluetoothの有効化メモ

OSが勝手に出してくれたりくれなかったりのところを整理するためのメモ 諸事情によりサンプルはXama

記事を読む

no image

【C#, WPF】XMLデータをListViewに表示し、チェック項目のみXML保存させる

前回の続きというか、WPF版。 <Window x:Class="MyWP

記事を読む

【Cocos2d-x】iPhone実機でプロジェクトを動かすまで

Macを購入してCocos2d-xデビューしたが、 iPhone実機で動かすまでをメモ

記事を読む

no image

Windows 10 IoT 系の概要、エディション、入手方法などを一度整理

Windows 10 IoT にここ最近振り回されているので、ここまで解釈した内容にて、まとメモ 正

記事を読む

no image

UWPとAzure Web AppsでOData

超メモ。走り書き。 Azure上にSQLデータベースコードファーストなAPIをODataで作成する。

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑