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)。 | |
GetHashCode | 傳回這個執行個體的雜湊程式碼。 (繼承自 Attribute)。 | |
GetType | 取得目前執行個體的 Type。 (繼承自 Object)。 | |
IsDefaultAttribute | 在衍生類別中覆寫時,表示這個執行個體的值是否為衍生類別的預設值。 (繼承自 Attribute)。 | |
Match | 在衍生類別中覆寫時,會傳回值,表示這個執行個體是否等於指定物件。 (繼承自 Attribute)。 | |
ToString | 傳回表示目前物件的字串。 (繼承自 Object)。 |
回頁首
欄位
名稱 | 說明 | |
---|---|---|
DefaultDataAccessMethod | 表示預設的資料存取方法。這個欄位是唯讀的。 | |
DefaultProviderName | 表示預設的資料提供者名稱。這個欄位是唯讀的。 |
回頁首
明確介面實作
名稱 | 說明 | |
---|---|---|
_Attribute.GetIDsOfNames | 將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。 (繼承自 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檔案指定資料來源的詳細資訊,請參閱逐步解說:使用組態檔定義資料來源。
如需資料驅動型測試的詳細資訊,請參閱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
下列測試將會通過。 它使用名為 sample.mdb 的 Access 資料庫,其中資料表 Table1 包含以下資料。
名稱 |
Balance |
Amount |
---|---|---|
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
執行緒安全
這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。不保證任何執行個體成員是安全執行緒。
請參閱
參考
Microsoft.VisualStudio.TestTools.UnitTesting 命名空間