DataSourceAttribute クラス

更新 : 2007 年 11 月

データ ドリブン テストにデータ ソース固有の情報を提供します。このクラスは継承できません。

名前空間 :  Microsoft.VisualStudio.TestTools.UnitTesting
アセンブリ :  Microsoft.VisualStudio.QualityTools.UnitTestFramework (Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 内)

構文

'宣言
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class DataSourceAttribute _
    Inherits Attribute
'使用
Dim instance As DataSourceAttribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class DataSourceAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class DataSourceAttribute sealed : public Attribute
public final class DataSourceAttribute extends Attribute

解説

DataSourceAttribute クラスは、データ ドリブン テストのデータ ソース情報を指定するための 2 つの方法を提供します。1 つ目は、DataSource 属性に渡される接続文字列、プロバイダ情報、およびソース テーブル名により情報を指定する方法です。

接続文字列の例を次に示します。

[DataSource("Provider=SQLOLEDB.1;Data Source=MySource;Integrated] Security=SSPI;Initial Catalog=MyCatalog;Persist Security Info=False", "MyTable")]

2 つ目は、app.config ファイル内の構成設定を指定する属性に単一の引数を渡す方法です。

構成設定の例 :

[DataSource("dataSourceNameFromConfigFile")]

メモ :

プロバイダごとに使用する接続文字列が異なります。プロバイダ自体が接続文字列の一部です。

app.config ファイルを使用してデータ ソースを指定する方法の詳細については、チュートリアル : データ ソースを定義するための構成ファイルの使用 のトピックを参照してください。

データ ドリブン テストの詳細については、「データ ドリブン単体テストの概要」を参照してください。

属性の使用方法の詳細については、「属性を使用したメタデータの拡張」を参照してください。

次のコードには、テスト対象のクラスとメソッドが含まれます。

using System;

namespace BankAccountNS
{
    public class BankAccount
    {
        private string custName;
        private double bal;

        public BankAccount(string customerName, double balance)
        {
            custName = customerName;
            bal = balance;
        }

        public double Balance
        { get { return bal; } }

        public void Debit(double amount)
        {
            if (amount < 0)
                throw new ArgumentOutOfRangeException("amount");
            bal -= amount;
        }
    }
}
Imports System

Namespace BankAccountNS
    Public Class BankAccount
        Private customerName As String
        Private bal As Double

        Public Sub New(ByVal customerName2 As String, ByVal balance As Double)
            customerName = customerName2
            bal = balance
        End Sub

        Public ReadOnly Property Balance() As Double
            Get
                Return bal
            End Get
        End Property

        Public Sub Debit(ByVal amount As Double)
            If amount < 0 Then
                Throw New ArgumentOutOfRangeException("amount")
            End If
            bal -= amount
        End Sub
    End Class
End Namespace

次のテストは合格になります。このテストでは、Table1 の次のデータを含む sample.mdb アクセス データベースを使用します。

名前

残高

金額

Jorg Bott

100

25

Pedro Ruivo

70

60

Mandar Samant

75

71.25

Russell King

159

158

Jun Cao

11.99

11.22

DataAccessMethod はシーケンシャルです。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using BankAccountNS;
using System;

namespace MyCSTestProject
{
    [TestClass()]
    public class BankAccountTest
    {
        private TestContext testContextInstance;
        public TestContext TestContext
        {
            get { return testContextInstance; }
            set { testContextInstance = value; }
        }

        [TestMethod()]
        [DataSource("System.Data.OleDb",
           "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\sample.mdb\"",
           "Table1",
           DataAccessMethod.Sequential)]
        public void DebitTest()
        {
            string customerName = testContextInstance.DataRow["Name"].ToString();

            double bal = Convert.ToDouble(testContextInstance.DataRow["Balance"]);
            double amt = Convert.ToDouble(testContextInstance.DataRow["Amount"]);

            double newBalance = bal - amt;

            BankAccount target = new BankAccount(customerName, bal);
            target.Debit(amt);

            Assert.AreEqual(newBalance, target.Balance, .00);
        }
    }
}
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports BankAccountNS
Imports System

Namespace TestProject1
    <TestClass()> _
    Public Class BankAccountTest

        Private testContextInstance As TestContext
        Public Property TestContext() As TestContext
            Get
                Return testContextInstance
            End Get
            Set(ByVal Value As TestContext)
                testContextInstance = Value
            End Set
        End Property

        <TestMethod()> _
        <DataSource("System.Data.OleDb", _
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""D:\sample.mdb""", _
        "Table1", DataAccessMethod.Sequential)> _
        Public Sub DebitTest()
            Dim customerName As String = testContextInstance.DataRow("Name").ToString()

            Dim balance As Double = Convert.ToDouble(testContextInstance.DataRow("Balance"))
            Dim amount As Double = Convert.ToDouble(testContextInstance.DataRow("Amount"))

            Dim NewBalance As Double = balance - amount

            Dim target As BankAccount = New BankAccount(customerName, balance)
            target.Debit(amount)

            Assert.AreEqual(NewBalance, target.Balance, 0.0)
        End Sub
    End Class
End Namespace

継承階層

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

スレッド セーフ

この型のすべてのパブリック static (Visual Basic では Shared) メンバは、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。

参照

参照

DataSourceAttribute メンバ

Microsoft.VisualStudio.TestTools.UnitTesting 名前空間

その他の技術情報

データ ドリブン ユニット テストのコーディング

方法 : データ ドリブン ユニット テストを構成する