DataSourceAttribute - класс

Обновлен: Ноябрь 2007

Предоставляет сведения об источнике данных для управляемого данными тестирования. Этот класс не наследуется.

Пространство имен:  Microsoft.VisualStudio.TestTools.UnitTesting
Сборка:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (в Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Синтаксис

'Декларация
<AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple := False)> _
Public NotInheritable Class DataSourceAttribute _
    Inherits Attribute
'Применение
Dim instance As DataSourceAttribute
[AttributeUsageAttribute(AttributeTargets.Method, AllowMultiple = false)]
public sealed class DataSourceAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Method, AllowMultiple = false)]
public ref class DataSourceAttribute sealed : public Attribute
public final class DataSourceAttribute extends Attribute

Заметки

Класс DataSourceAttribute обеспечивает два способа задания информации об источнике данных для управляемых данными тестирований. В первом способе информация задается посредством передачи в атрибут DataSource строки подключения, информации о поставщике и имени таблицы-источника.

Пример строки подключения:

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

Во втором способе в атрибут передается единственный аргумент, задающий параметр конфигурации, находящийся в файле app.config.

Пример параметра конфигурации

[DataSource("dataSourceNameFromConfigFile")]

ms245530.alert_note(ru-ru,VS.90).gifПримечание.

Разные поставщики используют различные строки подключения. Поставщик сам по себе является частью строки подключения.

Дополнительные сведения об использовании файла app.config для задания источника данных см. в разделе Пошаговое руководство. Использование файла конфигурации для определения источника данных.

Дополнительные сведения об управляемых данными тестах см. в разделе Общие сведения о модульных тестах, управляемых данными.

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

Примеры

Следующий код содержит тестируемые класс и метод.

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 со следующими данными.

Name

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

Иерархия наследования

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

Потокобезопасность

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

DataSourceAttribute - члены

Microsoft.VisualStudio.TestTools.UnitTesting - пространство имен

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

Написание кода модульного теста, управляемого данными

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