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

関連記事

UWPをHockeyApp対応させる

走り書きメモ。 UWPをHockeyApp対応させるためにはNuGetパッケージを使ってモジュール

記事を読む

no image

Xamarin.Forms.Xaml名前空間のXAMLマークアップ拡張のメモ

MarkupExtensionsのメモ。あとで確認用 ArrayExtension Bindin

記事を読む

Xamarin.Forms出力バイナリのメモ

iOS -> .ipa, Android -> .apk ipaファイル作成方法 ソリュー

記事を読む

【WPF/XAML】チェックボックスのデザイン変更

[xml] <Window x:Class="Sample"

記事を読む

no image

【VB.NET】DataGridViewで行の最大高を設定

DataGridViewにおける行の最大高さを設定するメモ 最大高さに満たない場合は内容を全て表示

記事を読む

Visual Studio から Android SDK Managerが起動できない

Android SDKやエミュレーターイメージのアップデートを行いたい場合にAndroid SDK

記事を読む

【ストアアプリ】トースト通知の基本

Windowsストアアプリ開発での基本。 トースト通知について投稿します。 Pack

記事を読む

シマンテックインストール時に「指定されたパスが空です。」

Windows10 64bit, Symantec Endpoint Protection はおそら

記事を読む

no image

Expression Encoder を組み込んだアプリケーションを配布する際のライセンス問題

Windowsアプリケーションにメディア編集機能を実装したい場合に、Expression Encod

記事を読む

no image

Visual Studio 2017 Version15.2 にアップデート後、Xamarin.iOS でビルドエラーが発生時の回避メモ

環境 Visual Studio Enterprise 2017 Version 15.2

記事を読む

Message

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

PAGE TOP ↑