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 | |
---|---|---|
![]() |
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. |
![]() |
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. |
![]() |
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 | |
---|---|---|
![]() |
ConnectionString | Obtém um valor que representa a cadeia de conexão para a 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 as informações de conexão da fonte de dados armazenada 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 que fornece dados. |
![]() |
TypeId | Quando implementada 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 essa instância é igual a um objeto especificado. (Herdado de Attribute.) |
![]() |
GetHashCode | Retorna o código hash desta instância. (Herdado de Attribute.) |
![]() |
GetType | Gets the Type of the current instance. (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 for igual a um objeto especificado. (Herdado de Attribute.) |
![]() |
ToString | Returns a string that represents the current object. (Herdado de Object.) |
Superior
Campos
Nome | Descrição | |
---|---|---|
![]() ![]() |
DefaultDataAccessMethod | Representa o método padrão de acesso a dados.Este campo é somente leitura. |
![]() ![]() |
DefaultProviderName | Representa o nome padrão do provedor de dados.Este campo é somente leitura. |
Superior
Implementações explícitas da interface
Nome | Descrição | |
---|---|---|
![]() ![]() |
System#Runtime#InteropServices#_Attribute#GetIDsOfNames | Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição. (Herdado de Attribute.) |
![]() ![]() |
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.) |
![]() ![]() |
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.) |
![]() ![]() |
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
Outros recursos
Como criar um teste de unidade orientado a dados