印刷用ページ       送信     
クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
TDD Support with the Generate From Usage Feature

このチュートリアルでは、 Visual Studio 2010 の新機能である Generate From Usage ( 使用法から生成 ) 機能について説明します。この機能はテスト駆動開発 (TDD) をサポートします。

TDD は、製品仕様に基づいて単体テストを最初に記述し、テストを成功させるために必要なソースコードを次に記述するソフトウェア設計のアプローチです。 Visual Studio 2010 では TDD をサポートしており、未定義の型とメンバがテストケースの中で参照された場合は、その時点でソースコード内に生成されます。

Visual Studio 2010 では、新しい型とメンバ を生成する際 、ワークフローへの割り込み は 最小限に抑え られ ます。コード内の現在の位置から離れ ることなく、 型、メソッド、プロパティ、フィールド、またはコンストラクタ用のスタブを作成できます。ダイアログボックスを呼び出して型生成オプションを指定し た場合 、ダイアログボックスが閉じると同時に 、 現在開いているファイルにフォーカス が 戻ります。

Visual Studio 2010 では、 Visual Studio に統合され ている すべてのテストフレームワークで Generate From Usage ( 使用法から生成 ) 機能 を 使用できます。このチュートリアルでは、 Microsoft Unit Testing Framework について説明します。

プロジェクトとテストプロジェクトをセットアップするには

1. Visual C# または Visual Basic で、新しい Windows クラスライブラリプロジェクトを作成し、選択した言語に応じて、 GFUDemo_VB または GFUDemo_CS という名前を付けます。

2. ソリューションエクスプローラで、上部にあるソリューションアイコンを右クリックし、 [ 追加 ] 、 [ 新しいプロジェクト ] をクリックして [ 新しいプロジェクトの追加 ] ダイアログボックスを開きます。左側の [ プロジェクトの種類 ] ウィンドウで、 [ テスト ] をクリックします。

3. 右側の [ テンプレート ] ウィンドウで [ テストプロジェクト ] をクリックし、既定名である TestProject1 をそのまま使用します。 Visual C# で呼び出した場合のダイアログボックスを次に示します。 Visual Basic でも同様のダイアログボックスが表示されます。

4. [ OK ] をクリックして [ 新しいプロジェクトの追加 ] ダイアログボックスを閉じます。

5.これで、テストの記述を開始する準備ができました。

単体テストから新しいクラスを生成するには

1. テストプロジェクトの中に、 UnitTest1 という名前のファイルがあります。ソリューションエクスプローラでこのファイルをダブルクリックして、コードエディタで開きます。生成される既定のコードは、この時点では単純なテンプレートであり、 test クラスと test メソッドだけが生成されます。

2. UnitTest1 クラス用の宣言を見つけ、名前を AutomobileTest に変更します。また、UnitTest1() コンストラクタの名前を AutomobileTest() に変更します。

注: IntelliSense の IntelliSense ステートメント補完に、標準モードと 使用優先 モードという 2 つのオプションが提供されるようになりました。定義されていないクラスとメンバが使用される場合には、 使用優先 モードを使用します。IntelliSense ウィンドウが開いているときにCtrl + Alt + スペースキーを押すと、標準モードと 使用優先 モードを切り替えることができます
使用優先 モードは、次の手順で "Automobile" を入力するときに役に立ちます。

3.TestMethod1 を見つけ、名前を DefaultAutomobileIsInitializedCorrectly に変更します。このメソッド 内 に Automobile というクラスの新しいインスタンスを作成します。型名の下にコンパイル時エラーを示す波線とスマートタグが表示されます。次の図に示すように、スマートタグの正確な位置はVisual Basic と C# のどちらを使用しているかによって異なります。

Visual C# のコード
 
Visual Basic のコード

4. マウスポインタをスマートタグの上に移動すると、 Automobile という名前の型はまだ定義されていないことを示すエラーメッセージが表示されます。スマートタグをクリックするか、 Ctrl + . (C trl + ピリオド ) キー を押して、次の図に示すように [ Generate From Usage ] (使用法から生成)コンテキストメニューを呼び出します。

Visual C# のコード
 
Visual Basic のコード

5. 2つのオプションがあります。テストプロジェクト 内 に新しいファイルを作成し、Automobile という名前の空のクラスを挿入するには、 [ Generate Class 'Automobile' ] (クラス 'Automobile ' の 生成)をクリックします。このオプションは、現在のプロジェクトの既定のアクセス修飾子を使用して新しいファイル内に新しい種類のクラスを作成する最短の方法です。ただし、新しいファイルをソースコードプロジェクトに追加する場合や、クラスを既存のファイルに挿入する場合があります。または、アクセス修飾子を指定する場合や、ファイルを別のプロジェクトに追加する場合もあります。このような場合は、 [ Generate other ] (その他 の 生成) をクリックして、 [ Generate other ] (その他 の 生成) ダイアログボックスを開きます。 Visual Basic で表示されるダイアログボックスを次に示します。 Visual C# の場合も同様です。

6. [ Generate other ] (その他 の 生成) をクリックして [ Generate other ] (その他 の 生成) ダイアログボックスを開きます。 [ プロジェクトの場所 ] ボックスの一覧の [ GFUDemo_VB ] または [ GFUDemo_CS ] をクリックして、ファイルをテストプロジェクトではなくソースコードプロジェクトの中に配置するように Visual Studio に指示します。

7. [ OK ] をクリックしてダイアログボックスを閉じます。新しいファイルが作成されます。

8. ソリューションエクスプローラで、 GFUDemo_VB または GFUDemo_CS プロジェクトノードの下を見て、新しいファイルが作成されたことを確認します。コードエディタでは、フォーカスは依然として AutomobileTest.DefaultAutomobileIsInitializedCorrectly にあります。このため、最小限の割り込みでテストの記述を続行できます。

プロパティスタブを生成するには

1. 製品仕様で、 Automobile クラスには Model TopSpeed という2つのパブリックプロパティがあると指定されているとします。これらのプロパティは、既定のコンストラクタによって、既定値 である "Not specified" と -1 を使用して 初期化される必要があります。この単体テストでは、既定のコンストラクタがこれらのプロパティを正しい既定値に設定することを検証します。

2. 次のコード行を DefaultAutomobileIsInitializedCorrectly に追加します。

Visual C# のコード
Assert .IsTrue(myAuto.Model == "Not specified" && myAuto.TopSpeed == -1);

Visual Basic のコード

Assert .IsTrue(myAuto.Model = "Not specified"And myAuto.TopSpeed = -1)

3.この行はAutomobile の 2 つの未定義プロパティを参照 している ので、スマートタグが表示されます。"TopSpeed" のスマートタグを呼び出し、 [ Generate property stub ] (プロパティスタブ の 生成) をクリックします。 "Model" プロパティのプロパティスタブも同様に生成します。次の図に、これらのスマートタグを示します。
Automobile クラス で 新しいプロパティの型はコンテキストから正しく推定されます。

Visual C# のコード

Visual Basic のコード

必要に応じて、 automobile.cs または automobile.vb ソースコードファイルに移動し、新しいプロパティが生成されたことを確認できます。

新しいコンストラクタ用のスタブを生成するには

1. このテストメソッドでは、 Model プロパティと TopSpeed プロパティを指定の値で初期化するコンストラクタスタブを生成します。テストを完了するためのコードを次の手順で追加します。次のテストメソッドを AutomobileTest クラスに追加します。

Visual C# のコード
[TestMethod]
publicvoid AutomobileWithModelNameCanStart()

{

string model = "550 Barchetta";

int topSpeed = 199;

Automobile myAuto = newAutomobile(model, topSpeed);

}

Visual Basic のコード
 <TestMethod()> PublicSub AutomobileWithModelNameCanStart()

Dim model AsString = "550 Barchetta"

Dim topSpeed AsInteger = 199

Dim myAuto AsNewAutomobile(model, topSpeed)

End Sub

2. 新しいクラスコンストラクタのスマートタグを呼び出し、 [ Generate constructor stub ] (コンストラクタスタブ の 生成) をクリックします。

3. Automobile クラスファイルでは、新しいコンストラクタが、コンストラクタ呼び出しで使用されたローカル変数の名前を調べ、 Automobile クラスの同名のプロパティを検索します。また、 Model プロパティと TopSpeed プロパティに引数値を格納するコードをコンストラクタ本体に指定します (Visual Basic では、新しいコンストラクタの _model フィールドと _topSpeed フィールドは、 Model プロパティと TopSpeed プロパティに対して暗黙的に定義された バッキング フィールドです ) 。

4. 新しいコンストラクタを生成すると、 DefaultAutomobileIsInitializedCorrectly の既定のコンストラクタ呼び出しの下に波線が表示されます。エラーメッセージにより、 Automobile クラスに は 引数を 受け取らない コンストラクタはないことが通知されます。パラメータを持たない明示的な既定のコンストラクタを生成するには、スマートタグを呼び出し、 [ Generate constructor stub ] ( コンストラクタスタブ の 生成 ) をクリックします。

メソッド用のスタブを生成するには

1. 製品仕様で、 ある 新しい Automobile クラスは、 Model プロパティと TopSpeed プロパティに既定値以外の値が設定された場合 は実行 状態に 移行 できる ことが 指定されてい る とします。次の行を AutomobileWithModelNameCanStart メソッドに追加します。

Visual C# のコード

myAuto .Start();
Assert.IsTrue(myAuto.IsRunning == true);

Visual Basic のコード

myAuto.Start()

Assert .IsTrue(myAuto.IsRunning = True)

2. myAuto.Start メソッド呼び出しのスマートタグを呼び出し、 [ Generate method stub ] ( メソッドスタブ の 生成 ) をクリックします。次に、 IsRunning のスマートタグを呼び出し、 [ Generate property stub ] ( プロパティスタブの生成 ) をクリックします。

Automobile クラス が 次のように表示されます。


Visual C# のコード
publicclassAutomobile
{
     publicint TopSpeed { get; set; }

     public string Model { get; set; }

     public Automobile(string model, int topSpeed)

     {

         // TODO: メンバの初期化を完了する

         this .Model = model;

         this .TopSpeed = topSpeed;

     }

     public Automobile()

     {

         // TODO: メンバの初期化を完了する

     }

     public void Start()

     {

         throw newNotImplementedException();

     }

     public bool IsRunning { get; set; }

}

Visual Basic のコード
PublicClassAutomobile

    Sub New(ByVal model AsString, ByVal topSpeed AsInteger)

        ' TODO: メンバの初期化を完了する

        _model = model

        _topSpeed = topSpeed

    End Sub

    Sub New()

        ' TODO: メンバの初期化を完了する

    End Sub

    Property TopSpeed AsInteger

    Property Model AsString

    Property IsRunning AsBoolean

    Sub Start()

        Throw New NotImplementedException

    End Sub

End Class

テストを実行するには

1. メインメニューの [ テスト ] をクリックし、 [ 実行 ] をポイントし て 、 [ ソリューションのすべてのテスト ] をクリックします。このコマンドは、現在のソリューション用に記述されたすべてのテストフレームワーク内のすべてのテストを実行します。ここでは2つのテストがあり、両方とも予想どおりに失敗します。 [ テスト結果 ] ウィンドウ が 次のように表示されます。

ソースコードに移動するには

1. テストを実行して失敗したので、次の手順は、 Automobile クラスに移動し 、 テストが成功するコードを実装することです。"移動"は Visual Studio 2010 の新機能であり、この機能を使用すると、型名や名前の一部などのテキスト文字列を簡単に入力 したり 、結果リスト で 要素をクリック して 目的の場所に移動 したり できます。

2. コードエディタ 内で クリックし、Ctrl + , ( Ctrl + コンマ ) キー を押して [ 移動 ] ダイアログボックスを開きます。次の図に示すように、テキストボックスに「 Start 」と入力します。

ソースコードを実装するには

1. 既定のコンストラクタにコードを追加して、 Model TopSpeed 、および IsRunning の各プロパティがそれぞれの正しい既定値である "Not specified" 、 -1 、および True (true) に 初期化されるようにします。

Visual C# のコード

public Automobile()

   {

   this .Model = "Not specified" ;

   this .TopSpeed = -1;

   this .IsRunning = true ;

   }

Visual Basic のコード
   SubNew()

       Model = "Not specified"

       TopSpeed = -1

       IsRunning = True

   End Sub

2. Start メソッドは、呼び出 された時点で Modelプロパティと TopSpeed プロパティ が 既定値以外の値 に 設定されている場合 にのみ 、 IsRunning フラグを true に設定します。NotImplementedException をメソッド 本体 から削除し、テストが成功する ように 目的の動作を実装します。

Visual C# のコード
public void Start()

{

    if ( this .Model != "Not specified" || this .TopSpeed != -1)

        this .IsRunning = true ;

    else

        this .IsRunning = false ;

}


Visual Basic のコード
Sub Start()

    If Model <> "Not specified"Or TopSpeed <> -1 Then

        IsRunning = True

    Else

        IsRunning = False

    End If

End Sub

テストを再実行するには

1. メインメニューの [ テスト ] をクリックし、 [ 実行 ] をポイントし て 、 [ ソリューションのすべてのテスト ] をクリックします。今回は、テストは成功します。 [ テスト結果 ] ウィンドウ が 次のように表示されます。



Page view tracker