Partilhar via


Classe DataSourceAttribute

Fornece informações de fonte específicas de dados para teste orientado a dados.Esta classe não pode ser herdada.

Namespace:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (em Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Sintaxe

<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

Comentários

The DataSourceAttribute classe fornece duas maneiras para especificar as informações sobre a fonte de dados para testes orientado a dados. A primeira forma Especifica informações por meio de um cadeia de conexão, informações do provedor e nome da tabela de fonte passado para o atributo DataSource.

cadeia de conexão Exemplo:

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

A segunda maneira passa um argumento único para o atributo que especifica a definição de configuração localizada no aplicativo. arquivo de configuração.

Exemplo de configuração de configuração:

[DataSource("dataSourceNameFromConfigFile")]

Observação:

Diferentes provedores usam seqüências de caracteres de conexão diferente.O próprio provedor é uma parte cadeia de conexão.

Para obter mais informações sobre como usar o App. arquivo de configuração para especificar uma fonte de dados, consulte Demonstra Passo a passo: Usando um arquivo de configuração para definir uma Origem de dados.

Para obter mais informações sobre testes orientados a dados, consulte Visão geral dos testes de unidade baseados em dados.

Para obter mais informações sobre como usar atributos, consulte Estendendo metadados usando atributos.

Exemplos

O código a seguir contém a classe e método de teste.

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

O seguinte teste passará.Ele usa o banco de dados de acesso sample.mdb que contém os seguintes dados na tabela 1.

Nome

Equilíbrio

Quantidade

Jorg Bott

100

25

Pedro Ruivo

70

60

Mandar Samant

75

71.25

Rei Russell

159

158

Jun Cao

11.99

11.22

Observe que o DataAccessMethod é seqüencial.

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

Hierarquia de herança

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

Acesso thread-safe

Quaisquer membros static (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Consulte também

Referência

Membros DataSourceAttribute

Namespace Microsoft.VisualStudio.TestTools.UnitTesting

Outros recursos

Codificando um teste de unidade orientado a dados

Como: Configurar um teste de unidade orientado a dados