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 - пространство имен

DataAccessMethod

Другие ресурсы

Практическое руководство. Создание модульного теста, управляемого данными

How to: Configure a Data-Driven Unit Test

Расширение метаданных с помощью атрибутов