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 | Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от 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
Пройдет следующий тест.Он использует демонстрационную базу данных Access sample.mdb, содержащую таблицу 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
Потокобезопасность
Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.
См. также
Ссылки
Microsoft.VisualStudio.TestTools.UnitTesting - пространство имен
Другие ресурсы
Практическое руководство. Создание модульного теста, управляемого данными