Condividi tramite


Classe DataSourceAttribute

Fornisce informazioni specifiche dell'origine dati per il test basato sui dati. La classe non può essere ereditata.

Gerarchia di ereditarietà

Object
  Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

Spazio dei nomi:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (in Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Sintassi

'Dichiarazione
<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

Il tipo DataSourceAttribute espone i seguenti membri.

Costruttori

  Nome Descrizione
Metodo pubblico DataSourceAttribute(String) Inizializza una nuova istanza della classe DataSourceAttribute. Questa istanza verrà inizializzata con un provider di dati e una stringa di connessione associati al nome dell'impostazione.
Metodo pubblico DataSourceAttribute(String, String) Inizializza una nuova istanza della classe DataSourceAttribute.Questa istanza verrà inizializzata con una stringa di connessione e il nome della tabella.
Metodo pubblico DataSourceAttribute(String, String, String, DataAccessMethod) Inizializza una nuova istanza della classe DataSourceAttribute. Quest'istanza verrà inizializzata con un provider di dati, una stringa di connessione, una tabella dati e un metodo di accesso ai dati per accedere all'origine dati.

In alto

Proprietà

  Nome Descrizione
Proprietà pubblica ConnectionString Ottiene un valore che rappresenta la stringa di connessione per l'origine dati.
Proprietà pubblica DataAccessMethod Ottiene il metodo utilizzato per accedere all'origine dati.
Proprietà pubblica DataSourceSettingName Ottiene un valore che indica il nome dell'impostazione utilizzato per identificare le informazioni connessione con l'origine dati memorizzate in un file di configurazione.
Proprietà pubblica ProviderInvariantName Ottiene un valore che rappresenta il provider di dati dell'origine dati.
Proprietà pubblica TableName Ottiene un valore che indica il nome della tabella che fornisce i dati.
Proprietà pubblica TypeId Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute. (Ereditato da Attribute)

In alto

Metodi

  Nome Descrizione
Metodo pubblico Equals Infrastruttura. Restituisce un valore che indica se l'istanza è uguale a un oggetto specificato. (Ereditato da Attribute)
Metodo pubblico GetHashCode Restituisce il codice hash per l'istanza. (Ereditato da Attribute)
Metodo pubblico GetType Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object)
Metodo pubblico IsDefaultAttribute Quando è sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito della classe derivata. (Ereditato da Attribute)
Metodo pubblico Match Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato. (Ereditato da Attribute)
Metodo pubblico ToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)

In alto

Campi

  Nome Descrizione
Campo pubblicoMembro statico DefaultDataAccessMethod Rappresenta il metodo di accesso ai dati predefinito.Questo è un campo di sola lettura.
Campo pubblicoMembro statico DefaultProviderName Rappresenta il nome del provider di dati predefinito.Questo è un campo di sola lettura.

In alto

Implementazioni esplicite dell'interfaccia

  Nome Descrizione
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#GetIDsOfNames Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch. (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#GetTypeInfo Recupera le informazioni sul tipo relative a un oggetto, che possono essere utilizzate per ottenere informazioni sul tipo relative a un'interfaccia. (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#GetTypeInfoCount Recupera il numero delle interfacce di informazioni di tipo fornite da un oggetto (0 o 1). (Ereditato da Attribute)
Implementazione esplicita dell'interfacciaMetodo privato System#Runtime#InteropServices#_Attribute#Invoke Fornisce l'accesso a proprietà e metodi esposti da un oggetto. (Ereditato da Attribute)

In alto

Note

La classe DataSourceAttribute fornisce due modi per specificare le informazioni dell'origine dati per test basati sui dati. Nel primo caso le informazioni vengono specificate tramite una stringa di connessione, informazioni del provider e il nome della tabella di origine passato all'attributo DataSourceAttribute.

Esempio di stringa di connessione:

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

Il secondo modo passa un argomento singolo all'attributo che specifica l'impostazione di configurazione situata nel file app.config.

Esempio di impostazione di configurazione:

[DataSource("dataSourceNameFromConfigFile")]

Nota

Provider di dati diversi utilizzano stringhe di connessione diverse.Il nome del provider fa parte della stringa di connessione.

Per ulteriori informazioni sull'utilizzo del file app.config per specificare un'origine dati, vedere Procedura dettagliata: utilizzo di un file di configurazione per definire un'origine dati.

Per ulteriori informazioni sui test basati sui dati, vedere Data-Driven Unit Tests.

Per ulteriori informazioni sull'utilizzo di attributi, vedere Estensione di metadati mediante attributi.

Esempi

Nel codice riportato di seguito sono contenuti la classe e il metodo da sottoporre a test.

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

Il seguente test verrà superato. Utilizza il database di accesso sample.mdb che contiene i dati seguenti in Table1.

Name

Equilibrio

Quantità

Jorg Bott

100

25

Pedro Ruivo

70

60

Mandar Samant

75

71.25

Russell King

159

158

Jun Cao

11.99

11.22

Si noti che il metodo DataAccessMethod è sequenziale.

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

Codice thread safe

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Vedere anche

Riferimenti

Spazio dei nomi Microsoft.VisualStudio.TestTools.UnitTesting

DataAccessMethod

Altre risorse

Procedura: creare uno unit test basato sui dati

How to: Configure a Data-Driven Unit Test

Estensione di metadati mediante attributi