Partilhar via


Classe DataSourceAttribute

Fornece informações da fonte de dados específica para testes controlados por dados. Essa classe não pode ser herdada.

Hierarquia de herança

Object
  Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

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

Sintaxe

'Declaração
<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

O tipo DataSourceAttribute expõe os membros a seguir.

Construtores

  Nome Descrição
Método público DataSourceAttribute(String) Inicializa uma nova instância da classe DataSourceAttribute. Essa instância será inicializada com um provedor de dados e uma cadeia de conexão associados ao nome da configuração.
Método público DataSourceAttribute(String, String) Inicializa uma nova instância da classe DataSourceAttribute.Essa instância será inicializada com um nome da cadeia de conexão e da tabela.
Método público DataSourceAttribute(String, String, String, DataAccessMethod) Inicializa uma nova instância da classe DataSourceAttribute. Essa instância será inicializada com um provedor de dados, uma cadeia de conexão, uma tabela de dados e um método de acesso a dados para acessar a fonte de dados.

Superior

Propriedades

  Nome Descrição
Propriedade pública ConnectionString Obtém um valor que representa a cadeia de conexão para a fonte de dados.
Propriedade pública DataAccessMethod Obtém o método usado para acessar a fonte de dados.
Propriedade pública DataSourceSettingName Obtém um valor que indica o nome da configuração usado para identificar as informações de conexão da fonte de dados armazenada em um arquivo de configuração.
Propriedade pública ProviderInvariantName Obtém um valor que representa o provedor de dados da fonte de dados.
Propriedade pública TableName Obtém um valor que indica o nome da tabela que fornece dados.
Propriedade pública TypeId Quando implementada em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute.)

Superior

Métodos

  Nome Descrição
Método público Equals Infraestrutura. Retorna um valor que indica se essa instância é igual a um objeto especificado. (Herdado de Attribute.)
Método público GetHashCode Retorna o código hash desta instância. (Herdado de Attribute.)
Método público GetType Gets the Type of the current instance. (Herdado de Object.)
Método público IsDefaultAttribute Quando substituído em uma classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada. (Herdado de Attribute.)
Método público Match Quando substituído em uma classe derivada, retorna um valor que indica se esta instância for igual a um objeto especificado. (Herdado de Attribute.)
Método público ToString Returns a string that represents the current object. (Herdado de Object.)

Superior

Campos

  Nome Descrição
Campo públicoMembro estático DefaultDataAccessMethod Representa o método padrão de acesso a dados.Este campo é somente leitura.
Campo públicoMembro estático DefaultProviderName Representa o nome padrão do provedor de dados.Este campo é somente leitura.

Superior

Implementações explícitas da interface

  Nome Descrição
Implementação explícita da interfaceMétodo particular System#Runtime#InteropServices#_Attribute#GetIDsOfNames Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição. (Herdado de Attribute.)
Implementação explícita da interfaceMétodo particular System#Runtime#InteropServices#_Attribute#GetTypeInfo Recupera as informações de tipo para um objeto, que pode ser usado para obter informações de tipo para uma interface. (Herdado de Attribute.)
Implementação explícita da interfaceMétodo particular System#Runtime#InteropServices#_Attribute#GetTypeInfoCount Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1). (Herdado de Attribute.)
Implementação explícita da interfaceMétodo particular System#Runtime#InteropServices#_Attribute#Invoke Fornece acesso a propriedades e métodos expostos por um objeto. (Herdado de Attribute.)

Superior

Comentários

A classe de DataSourceAttribute fornece duas maneiras de especificar informações da fonte de dados para testes controlados por dados. A primeira forma especifica as informações por meio de uma cadeia de conexão, as informações do provedor, e o nome da tabela de origem passado para DataSourceAttribute.

Exemplo de cadeia de conexão:

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

O segundo modo passa um único argumento para o atributo que especifica o parâmetro de configuração localizado no arquivo de app.config .

Exemplo de parâmetro de configuração:

[DataSource("dataSourceNameFromConfigFile")]

Dica

Cadeias de conexão diferentes de uso diferente dos provedores de dados.O nome do provedor é uma parte da cadeia de conexão.

Para obter mais informações sobre como usar o arquivo de app.config para especificar uma fonte de dados, consulte Instruções passo a passo: usando um arquivo de configuração para definir uma fonte de dados.

Para obter mais informações sobre testes controlados por dados, consulte Data-Driven Unit Tests.

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

Exemplos

O código a seguir contém a classe e o método para 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á. Usa o base de dados de acesso de sample.mdb que contém os dados a seguir em Table1.

Nome

Saldo

Quantidade

Jorg Bott

100

25

Pedro Ruivo

70

60

Para fazer com que Samant

75

71.25

Rei de Russell

159

158

Jun Cao

11.99

11.22

Observe que DataAccessMethod é sequencial.

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

Acesso thread-safe

Quaisquer membros estático (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

Namespace Microsoft.VisualStudio.TestTools.UnitTesting

DataAccessMethod

Outros recursos

Como criar um teste de unidade orientado a dados

How to: Configure a Data-Driven Unit Test

Estendendo metadados por meio de atributos