Partilhar via


Classe DataSourceAttribute

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

Hierarquia de herança

System.Object
  System.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.Esta instância será inicializada com uma seqüência de conexão e o provedor de dados associada com o nome de configuração.
Método público DataSourceAttribute(String, String) Inicializa uma nova instância da classe DataSourceAttribute.Esta instância será inicializada com um nome de tabela e de seqüência de caracteres de conexão.
Método público DataSourceAttribute(String, String, String, DataAccessMethod) Inicializa uma nova instância da classe DataSourceAttribute.Esta instância será inicializada com um provedor de dados, seqüência de conexão, tabela de dados e 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 seqüência de conexão da 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 informações de conexão de fonte de dados armazenadas 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 fornecer dados.
Propriedade pública TypeId Quando implementado 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 esta instância é igual a um objeto especificado. (Herdado de Attribute.)
Método público GetHashCode Retorna o código hash para essa instância. (Herdado de Attribute.)
Método público GetType Obtém Type da instância atual. (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 é igual a um objeto especificado. (Herdado de Attribute.)
Método público ToString Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object.)

Superior

Campos

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

Superior

Implementações explícitas da interface

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

Superior

Comentários

O DataSourceAttribute classe fornece duas maneiras para especificar dados de informações para testes baseados em dados de origem.A primeira forma Especifica as informações por meio de uma seqüência de conexão, informações do provedor, e o nome da tabela de origem passado para o DataSourceAttribute.

Exemplo de seqüência de caracteres de conexão:

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

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

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

[DataSource("dataSourceNameFromConfigFile")]

ObservaçãoObservação

Os provedores de dados diferentes usam seqüências de caracteres de conexão diferente.O nome do provedor é uma parte da seqüência de conexão.

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

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

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

Exemplos

O código a seguir contém a classe e um método para testar.

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 sample.mdb que contém os seguintes dados na tabela 1.

Nome

Saldo

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

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 usando atributos