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に任せる、などのアプローチもできるかもしれません。
そうするとユニットテスト作成の時間がかなり短縮できそうですね。

関連記事

PHP executable not found. Install PHP 7 and add it to your PATH or set the php.executablePath setting

Visual Studio Code へ PHP IntelliSense 拡張をインストールし

記事を読む

【iPhoneアプリ】リリース手順〜審査申し込み〜

初めてiPhoneアプリを作成したがリリース手順が 手元の参考書と全然違って困ったのでメモ。

記事を読む

no image

Microsoft.Expression.Encoderで動画のフレーム画像を取得

動画ファイルから指定したフレーム画像を取得する。 Microsoft.Expression.Enco

記事を読む

拡張温度に対応した Windows 10 IoT Core ボード

Windows 10 IoT Core 対応ボード その2 こっちは拡張温度対応している。 Ban

記事を読む

Xamarin.Forms + Visual Studio Team Services ビルドタスクで自動バージョンアップ

Visual Studio Team Services で Xamarin.Forms の継続的デリ

記事を読む

no image

Windows10 IoT CoreでWindowsアップデートの自動実行を停止する

Manage IoT Core device updates このリンクにアップデートコントロール

記事を読む

Xamarin Studio から Visual Studio for Mac へ変更してから、”The “XamlCTask” task failed unexpectedly.” が発生。

Visual Studio for Mac がGAしたので、インストールしてみた。 それまで開発して

記事を読む

no image

Windows8.1 64bitにVB6.0開発環境を構築メモ

MSDNフォーラムの、この投稿はとても素晴らしいです。 windows 8 64bit

記事を読む

no image

【XAML/VB.NET】XAMLファイルを帳票フォーマットとして使用する

掲題について。結論としてはFixedPageをルートとするXAMLファイルを XamlReader

記事を読む

【.NET Framework 4.6.1】MultiLineなTextBoxでCtrl+Aが使えない問題が解決(今更)

WinForms.NETなアプリケーションの標準TextBoxで、Multiline=Trueに設定

記事を読む

Message

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

PAGE TOP ↑