Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト
Visual Studio 2005

できる開発者は知っている!使って覚える Visual Studio 2008

「使って覚える Visual Studio 2008」では、さまざまな課題に対して Visual Studio 2008 が提供している機能やソリューションを、ステップ バイ ステップで紹介いたします。ステップに沿って Visual Studio 2008 の機能を使ってみることで、開発の現場ですぐに活用できる実践的な知識を身につけていただけます。

第 2 回境界値のテストをやってみよう

Step 1

テスト対象のプロジェクトを作成してします。
Visual Studio 2008 を起動して [ファイル] - [新規作成] - [プロジェクト] をクリックします。

図 1. [新しいプロジェクト] ダイアログからクラス ライブラリ プロジェクトを作成

図 1. [新しいプロジェクト] ダイアログからクラス ライブラリ プロジェクトを作成

[新しいプロジェクト] ダイアログが表示されるので、[テンプレート] に [クラス ライブラリ] を選択して、[プロジェクト名] に「商品価格」 と入力して、[OK] ボタンをクリックします。

Step 2

商品価格を取得するメソッドを実装していきます。プロジェクト作成時に作られている Class1 に以下のコードを追加します。 今回は購入数量に応じて、単価を変化させる「商品価格取得」メソッドを作成していきます。通常は 200 円の商品が、500 個以上の購入で 190 円、1000 個以上の購入で 180 円に値引きされます。

#C
public decimal 商品価格(int 数量)
{
      if (数量 > 1000)
      {
            return 180;
      }
      else if (数量 > 500)
      {
            return 190;
      }
      return 200;
}
 
Visual Basic

Public Function商品価格(ByVal 数量 As Integer) As Decimal
      If 数量 > 1000 Then
            Return 180

      Else If 数量 > 500 Then
            Return 190
      End If

      Return
200
End Function

Step 3

テスト対象メソッドの実装が終わったら、次に単体テストを実装していきましょう。

図 2. 右クリック メニューから [単体テストの作成] をクリック

図 2. 右クリック メニューから [単体テストの作成] をクリック

テスト対象のメソッド上で右クリックして、 [単体テストの作成] をクリックします。

 

図 3. [単体テストの作成] でテスト作成対象のメソッドを選択

図 3. [単体テストの作成] でテスト作成対象のメソッドを選択

[単体テストの作成] ダイアログが表示されるので、対象のメソッドがチェックされていることを確認して、[OK] ボタンをクリックします。

図 4. テスト プロジェクトの名前を入力

図 4. テスト プロジェクトの名前を入力

[新しいテスト プロジェクト] ダイアログが表示されるので、「商品価格.Test」 と入力して、[作成] ボタンをクリックします。テスト コードは、テスト データを作成した後で変更していきます。

Step 4

Excel を使ってテスト データを作成します。
Excel で 1 行目にデータのタイトルを入力して 2 行目以降にデータを入力していきます。

図 5. Excel でテスト データを作成

図 5. Excel でテスト データを作成

CSV データには、500 個の前後である 499 〜 501 までと、
1000 個の境界である 999 〜 1001 までのデータを作成します。

図 6. テスト データを CSV 形式で保存する

図 6. テスト データを CSV 形式で保存する

ファイル名に 「商品価格テストデータ」 を入力、ファイルの種類に [CSV (カンマ区切り)] を選択して、[保存] ボタンをクリックします。

Step 5

テスト メソッドが作成できたら、CSV ファイルを選択します。 まず、メニュー バーの [テスト] - [ウィンドウ] - [テスト ビュー] をクリックして、テスト ビュー ウィンドウを表示します。

図 7. テスト ビュー ウィンドウでテスト メソッドを選択

図 7. テスト ビュー ウィンドウでテスト メソッドを選択

プロジェクトで実装されているテストの一覧が表示されるので、[商品価格取得Test] を選択します。

図 8. テスト メソッドのプロパティからデータ接続文字列を選択

図 8. テスト メソッドのプロパティからデータ接続文字列を選択

[プロパティ] ウィンドウにテストのプロパティが表示されるので、[データ接続文字列] を選択して、[...] ボタンをクリックします。

図 9. テスト データ ソース作成ウィザードで CSV File を選択

図 9. テスト データ ソース作成ウィザードで CSV File を選択

[テスト データ ソース作成ウィザード] で [CSV File] を選択して、[次へ] ボタンをクリックします。

図 10. CSV ファイルを選択して、プレビューを表示

図 10. CSV ファイルを選択して、プレビューを表示

CSV ファイルを選択すると CSV データがプレビュー表示されます。
[完了] ボタンをクリックして、ダイアログを閉じると、以下のダイアログが表示されます。
[はい] をクリックするとプロジェクト フォルダに CSV ファイルがコピーされます。

図 11. データベース ファイルのコピー確認ダイアログで [はい] をクリック

図 11. データベース ファイルのコピー確認ダイアログで [はい] をクリック

ダイアログが閉じると、テスト コードに以下のように CSV ファイルの情報が追加されているのが確認できます。

#C

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\商品価格取得テストデータ.csv", "商品価格取得テストデータ#csv", DataAccessMethod.Sequential), DeploymentItem("ClassLibrary1.Test\\商品価格取得テストデータ.csv"), TestMethod()]

Visual Basic

<DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\商品価格取得テストデータ.csv", "商品価格取得テストデータ#csv", DataAccessMethod.Sequential)> <DeploymentItem("ClassLibrary1.Test\商品価格取得テストデータ.csv")> <TestMethod()> _

さて、次にテスト コードを変更していきましょう。

Step 6

読み込んだデータでテストを実施するようにコードを変更します。

#C
/// <summary>
///商品価格取得 のテスト
///</summary>
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\商品価格取得テストデータ.csv", "商品価格取得テストデータ#csv", DataAccessMethod.Sequential), DeploymentItem("ClassLibrary1.Test\\商品価格取得テストデータ.csv"), TestMethod()]
public void 商品価格取得Test()
{
      Class1 target = new Class1();
      int quantity = (int)TestContext.DataRow["数量"];
      Decimal expected = (int)TestContext.DataRow["単価"];
      Decimal actual;
      actual = target.商品価格(quantity);
      Assert.AreEqual(expected, actual);
}
 
Visual Basic
'''<summary>
'''商品価格取得 のテスト
'''</summary>
<DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\商品価格取得テストデータ.csv", "商品価格取得テストデータ#csv", DataAccessMethod.Sequential)> <DeploymentItem("ClassLibrary1.Test\商品価格取得テストデータ.csv")> <TestMethod()> _
Public Sub 商品価格取得Test()
      Dim target As Class1 = New Class1
      Dim quantity As Integer = CInt(TestContext.DataRow("数量"))
      Dim expected As [Decimal] = CDec(TestContext.DataRow("単価"))
      Dim actual As [Decimal]
      actual = target.商品価格(quantity)
      Assert.AreEqual(expected, actual)
End Sub

CSV ファイルから読み込んだデータを TestContext.DataRow プロパティで名前を指定して取得しているのがわかります。また、数値データは自動的に int (Integer) 型に変換されているのが確認できると思います。商品価格取得メソッドの戻り値は、Decimal 型なので、expected は、TestContext.DataRow から返される int (Integer) 値を Decimal 型に変換する必要がありますが、C# では、int 型にキャストして、自動的に Decimal に変換しています。また、VB では、CDec 関数で Decimal 型に変換されています。

Step 7

それでは、[テスト ビュー] ウィンドウのツールバーから対象のテストを選択して、テストを実行してみましょう。

図 12. ツールバーの[選択範囲の実行] をクリックしてテストを実行

図 12. ツールバーの[選択範囲の実行] をクリックしてテストを実行

テストが実行されると [テスト結果] ウィンドウにテストの実施結果が表示されます。
ここでは、テストが失敗していることがわかります。

図 13. テストの実施結果が表示される

図 13. テストの実施結果が表示される

結果の行をダブルクリックすると、テスト結果の詳細が表示されます。

図 14. テスト結果の詳細情報を確認

図 14. テスト結果の詳細情報を確認

ここでは、6 個のテストのうち 4 個が成功して、2 個が失敗していることがわかります。また、期待していた値と実際の値の違いが表示されています。これによって境界値のコードが間違っていることがわかります。エラーになった内容を確認して、再テストを実施していきます。 以下のように比較を実施しているコードにイコールを追加して、再テストを実施してみましょう。

#C
public decimal 商品価格(int 数量)
{
      if (数量 >= 1000)
      {
            return 180;
      }
      else if (数量 >= 500)
      {
            return 190;
      }
      return 200;
}
Visual Basic
Public Function商品価格(ByVal数量As Integer) As Decimal
      If 数量 >= 1000 Then
      Return 180

      Else If 数量 >= 500 Then
            Return 190
      End If

      Return
200
End Function

今度は正しくすべてのテストが成功していることが確認できます。

図 15. テスト結果の詳細情報を確認

図 15. テスト結果の詳細情報を確認

▲ Top of Page



Microsoft