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 | |
---|---|---|
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. | |
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. | |
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 | |
---|---|---|
ConnectionString | Obtém um valor que representa a seqüência de conexão da fonte de dados. | |
DataAccessMethod | Obtém o método usado para acessar a fonte de dados. | |
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. | |
ProviderInvariantName | Obtém um valor que representa o provedor de dados da fonte de dados. | |
TableName | Obtém um valor que indica o nome da tabela fornecer dados. | |
TypeId | Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute. (Herdado de Attribute.) |
Superior
Métodos
Nome | Descrição | |
---|---|---|
Equals | Infraestrutura. Retorna um valor que indica se esta instância é igual a um objeto especificado. (Herdado de Attribute.) | |
GetHashCode | Retorna o código hash para essa instância. (Herdado de Attribute.) | |
GetType | Obtém Type da instância atual. (Herdado de Object.) | |
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.) | |
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.) | |
ToString | Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object.) |
Superior
Campos
Nome | Descrição | |
---|---|---|
DefaultDataAccessMethod | Representa o método padrão de acesso de dados.Este campo é somente leitura. | |
DefaultProviderName | Representa o nome do provedor de dados padrão.Este campo é somente leitura. |
Superior
Implementações explícitas da interface
Nome | Descrição | |
---|---|---|
_Attribute.GetIDsOfNames | Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho. (Herdado de Attribute.) | |
_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.) | |
_Attribute.GetTypeInfoCount | Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). (Herdado de Attribute.) | |
_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çã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
Outros recursos
Como criar um teste de unidade orientado a dados