다음을 통해 공유


DataSourceAttribute 클래스

데이터 기반 테스트를 위한 데이터 소스별 정보를 제공합니다. 이 클래스는 상속될 수 없습니다.

상속 계층 구조

Object
  Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

네임스페이스:  Microsoft.VisualStudio.TestTools.UnitTesting
어셈블리:  Microsoft.VisualStudio.QualityTools.UnitTestFramework(Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

구문

‘선언
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class DataSourceAttribute _
    Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class DataSourceAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class DataSourceAttribute sealed : public Attribute
[<Sealed>]
[<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)>]
type DataSourceAttribute =  
    class 
        inherit Attribute 
    end
public final class DataSourceAttribute extends Attribute

DataSourceAttribute 형식에서는 다음과 같은 멤버를 노출합니다.

생성자

  이름 설명
Public 메서드 DataSourceAttribute(String) DataSourceAttribute 클래스의 새 인스턴스를 초기화합니다. 이 인스턴스는 설정 이름과 관련된 연결 문자열 및 데이터 공급자를 사용하여 초기화됩니다.
Public 메서드 DataSourceAttribute(String, String) DataSourceAttribute 클래스의 새 인스턴스를 초기화합니다.이 인스턴스는 연결 문자열과 테이블 이름을 사용하여 초기화됩니다.
Public 메서드 DataSourceAttribute(String, String, String, DataAccessMethod) DataSourceAttribute 클래스의 새 인스턴스를 초기화합니다. 이 인스턴스는 데이터 소스에 액세스하기 위한 데이터 액세스 메서드, 데이터 테이블, 연결 문자열 및 데이터 공급자를 사용하여 초기화됩니다.

위쪽

속성

  이름 설명
Public 속성 ConnectionString 데이터 소스에 대한 연결 문자열을 나타내는 값을 가져옵니다.
Public 속성 DataAccessMethod 데이터 소스에 액세스하는 데 사용되는 메서드를 가져옵니다.
Public 속성 DataSourceSettingName 구성 파일에 저장되어 있는 데이터 소스 연결 정보를 식별하는 데 사용되는 설정 이름을 나타내는 값을 가져옵니다.
Public 속성 ProviderInvariantName 데이터 소스의 데이터 공급자를 나타내는 값을 가져옵니다.
Public 속성 TableName 데이터를 공급하는 테이블 이름을 나타내는 값을 가져옵니다.
Public 속성 TypeId 파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다. (Attribute에서 상속됨)

위쪽

메서드

  이름 설명
Public 메서드 Equals 인프라입니다. 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨)
Public 메서드 GetHashCode 이 인스턴스의 해시 코드를 반환합니다. (Attribute에서 상속됨)
Public 메서드 GetType 현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드 IsDefaultAttribute 파생 클래스에서 재정의된 경우 이 인스턴스의 값이 파생 클래스의 기본값인지 여부를 나타냅니다. (Attribute에서 상속됨)
Public 메서드 Match 파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨)
Public 메서드 ToString 현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)

위쪽

필드

  이름 설명
Public 필드정적 멤버 DefaultDataAccessMethod 기본 데이터 액세스 메서드를 나타냅니다.이 필드는 읽기 전용입니다.
Public 필드정적 멤버 DefaultProviderName 기본 데이터 공급자 이름을 나타냅니다.이 필드는 읽기 전용입니다.

위쪽

명시적 인터페이스 구현

  이름 설명
명시적 인터페이스 구현Private 메서드 System#Runtime#InteropServices#_Attribute#GetIDsOfNames 이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다. (Attribute에서 상속됨)
명시적 인터페이스 구현Private 메서드 System#Runtime#InteropServices#_Attribute#GetTypeInfo 인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다. (Attribute에서 상속됨)
명시적 인터페이스 구현Private 메서드 System#Runtime#InteropServices#_Attribute#GetTypeInfoCount 개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1). (Attribute에서 상속됨)
명시적 인터페이스 구현Private 메서드 System#Runtime#InteropServices#_Attribute#Invoke 개체에서 노출하는 메서드와 속성에 대한 액세스를 제공합니다. (Attribute에서 상속됨)

위쪽

설명

DataSourceAttribute 클래스를 사용하면 데이터 기반 테스트를 위한 데이터 소스 정보를 두 가지 방식으로 지정할 수 있습니다. 첫 번째 방법은 연결 문자열, 공급자 정보 및 DataSourceAttribute로 전달되는 소스 테이블을 통해 정보를 지정합니다.

연결 문자열 예제:

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

두 번째 방법은 app.config 파일에 있는 구성 설정을 지정하는 특성에 단일 인수를 전달합니다.

구성 설정 예제:

[DataSource("dataSourceNameFromConfigFile")]

참고

다른 데이터 공급자가 다른 연결 문자열을 사용합니다.연결 문자열의 일부인 공급자의 이름입니다.

데이터 소스 지정을 위한 app.config 파일 사용에 대한 자세한 내용은 연습: 구성 파일을 통한 데이터 소스 정의를 참조하십시오.

데이터 기반 테스트에 대한 자세한 내용은 Data-Driven Unit Tests를 참조하십시오.

특성 사용에 대한 자세한 내용은 특성을 사용하여 메타데이터 확장을 참조하십시오.

예제

다음 코드에는 테스트할 클래스와 메서드가 포함되어 있습니다.

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 Access 데이터베이스를 사용합니다.

Name

Balance

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

스레드로부터의 안전성

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

참고 항목

참조

Microsoft.VisualStudio.TestTools.UnitTesting 네임스페이스

DataAccessMethod

기타 리소스

방법: 데이터 기반 단위 테스트 만들기

How to: Configure a Data-Driven Unit Test

특성을 사용하여 메타데이터 확장