DataSourceAttribute 클래스
데이터 기반 테스트를 위한 데이터 소스별 정보를 제공합니다. 이 클래스는 상속될 수 없습니다.
상속 계층 구조
System.Object
System.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 형식에서는 다음과 같은 멤버를 노출합니다.
생성자
이름 | 설명 | |
---|---|---|
DataSourceAttribute(String) | DataSourceAttribute 클래스의 새 인스턴스를 초기화합니다.이 인스턴스는 설정 이름과 관련된 연결 문자열 및 데이터 공급자를 사용하여 초기화됩니다. | |
DataSourceAttribute(String, String) | DataSourceAttribute 클래스의 새 인스턴스를 초기화합니다.이 인스턴스는 연결 문자열과 테이블 이름을 사용하여 초기화됩니다. | |
DataSourceAttribute(String, String, String, DataAccessMethod) | DataSourceAttribute 클래스의 새 인스턴스를 초기화합니다.이 인스턴스는 데이터 소스에 액세스하기 위한 데이터 액세스 메서드, 데이터 테이블, 연결 문자열 및 데이터 공급자를 사용하여 초기화됩니다. |
위쪽
속성
이름 | 설명 | |
---|---|---|
ConnectionString | 데이터 소스에 대한 연결 문자열을 나타내는 값을 가져옵니다. | |
DataAccessMethod | 데이터 소스에 액세스하는 데 사용되는 메서드를 가져옵니다. | |
DataSourceSettingName | 구성 파일에 저장되어 있는 데이터 소스 연결 정보를 식별하는 데 사용되는 설정 이름을 나타내는 값을 가져옵니다. | |
ProviderInvariantName | 데이터 소스의 데이터 공급자를 나타내는 값을 가져옵니다. | |
TableName | 데이터를 공급하는 테이블 이름을 나타내는 값을 가져옵니다. | |
TypeId | 파생 클래스에서 구현된 경우 이 Attribute에 대한 고유 식별자를 가져옵니다. (Attribute에서 상속됨) |
위쪽
메서드
이름 | 설명 | |
---|---|---|
Equals | 인프라입니다. 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨) | |
Finalize | 가비지 수집에서 회수하기 전에 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨) | |
GetHashCode | 이 인스턴스에 대한 해시 코드를 반환합니다. (Attribute에서 상속됨) | |
GetType | 현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨) | |
IsDefaultAttribute | 파생 클래스에서 재정의된 경우 이 인스턴스의 값이 파생 클래스의 기본값인지 여부를 나타냅니다. (Attribute에서 상속됨) | |
Match | 파생 클래스에서 재정의된 경우 이 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다. (Attribute에서 상속됨) | |
MemberwiseClone | 현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨) | |
ToString | 현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨) |
위쪽
필드
이름 | 설명 | |
---|---|---|
DefaultDataAccessMethod | 기본 데이터 액세스 메서드를 나타냅니다.이 필드는 읽기 전용입니다. | |
DefaultProviderName | 기본 데이터 공급자 이름을 나타냅니다.이 필드는 읽기 전용입니다. |
위쪽
명시적 인터페이스 구현
이름 | 설명 | |
---|---|---|
_Attribute.GetIDsOfNames | 이름 집합을 해당하는 디스패치 식별자 집합에 매핑합니다. (Attribute에서 상속됨) | |
_Attribute.GetTypeInfo | 인터페이스의 형식 정보를 가져오는 데 사용할 수 있는 개체의 형식 정보를 검색합니다. (Attribute에서 상속됨) | |
_Attribute.GetTypeInfoCount | 개체에서 제공하는 형식 정보 인터페이스의 수를 검색합니다(0 또는 1). (Attribute에서 상속됨) | |
_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 파일 사용에 대한 자세한 내용은 연습: 구성 파일을 통한 데이터 소스 정의를 참조하십시오.
데이터 기반 테스트에 대한 자세한 내용은 Overview of 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 네임스페이스