Partilhar via


Classe DataSourceAttribute

Fornece informações específicas de fonte de dados para testar orientado a dados. Esta 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, a tabela de dados e o método de acesso de dados para acessar a fonte de dados.

Início

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 de 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 de tabela, fornecendo os dados.
Propriedade pública TypeId Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute.)

Início

Métodos

  Nome Descrição
Método público Equals Infraestrutura. Returns a value that indicates whether this instance is equal to a specified object. (Herdado de Attribute.)
Método protegido Finalize Permite que um objeto tentar liberar recursos e executar outras operações de limpeza antes que ele é recuperado pela coleta de lixo. (Herdado de Object.)
Método público GetHashCode Retorna o código hash para essa instância. (Herdado de Attribute.)
Método público GetType Obtém o 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 protegido MemberwiseClone Cria uma cópia superficial do atual Object. (Herdado de Object.)
Método público ToString Retorna um string que representa o objeto atual. (Herdado de Object.)

Início

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.

Início

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.)

Início

Comentários

O DataSourceAttribute classe fornece duas maneiras para especificar informações de fonte de dados para testes orientados a dados. A primeira forma Especifica informações por meio de uma seqüência de conexão, informações do provedor e 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 caracteres de conexão.

Para obter mais informações sobre como usar o app.config para especificar uma fonte de dados de arquivos, consulte Demonstra 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 Overview of 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 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 do access 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 de 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 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

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