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

関連記事

[OxyPlot]errro CS0117: ‘Resource.Attribute’ に ‘mediaRouteSettingsDrawable’ の定義がありません

Xamarin.Formsでグラフ描画を行う方法のひとつにOxyPlotというライブラリがある。

記事を読む

画面設計デザイン時の無料画面イメージ作成ツール

画面デザイン全般に使っているツールを紹介。 Webアプリ作成時のワイヤーフレームや、 ス

記事を読む

no image

KeyboardNavigation以外でFocusVisualStyleを表示させる

WPFです。 結論としてはリフレクションで無理やりやれなくはなさそうという感じ。 元ネタはMSDN

記事を読む

no image

属性を使って、列挙型の列挙子を並び替え、フィルタリングする

メモだよ

記事を読む

no image

UWPとAzure Web AppsでOData

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

記事を読む

no image

【.NET】イベントのサブスクライブとサブスクライブ解除

.NETでイベントをハンドルする方法 サブスクライブ void CustomEven

記事を読む

no image

Xamarin.FormsのAndroidでスプラッシュ画面

Xamarin.Formsでアプリを作成した時、iOSは起動時にLauncher.storyboar

記事を読む

no image

Xamarin.Android フルスクリーン

自分用メモです。

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

Message

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

PAGE TOP ↑