Freigeben über


DataSourceAttribute-Klasse

Stellt datenquellenspezifische Informationen für datengesteuerte Tests bereit. Diese Klasse kann nicht vererbt werden.

Vererbungshierarchie

System.Object
  System.Attribute
    Microsoft.VisualStudio.TestTools.UnitTesting.DataSourceAttribute

Namespace:  Microsoft.VisualStudio.TestTools.UnitTesting
Assembly:  Microsoft.VisualStudio.QualityTools.UnitTestFramework (in Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

Syntax

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

Der DataSourceAttribute-Typ macht die folgenden Member verfügbar.

Konstruktoren

  Name Beschreibung
Öffentliche Methode DataSourceAttribute(String) Initialisiert eine neue Instanz der DataSourceAttribute-Klasse.Diese Instanz wird mit einem Datenanbieter und einer Verbindungszeichenfolge initialisiert, die dem Einstellungsnamen zugeordnet sind.
Öffentliche Methode DataSourceAttribute(String, String) Initialisiert eine neue Instanz der DataSourceAttribute-Klasse.Diese Instanz wird mit einer Verbindungszeichenfolge und einem Tabellennamen initialisiert.
Öffentliche Methode DataSourceAttribute(String, String, String, DataAccessMethod) Initialisiert eine neue Instanz der DataSourceAttribute-Klasse.Diese Instanz wird mit einem Datenanbieter, einer Verbindungszeichenfolge, einer Datentabelle und einer Datenzugriffsmethode für den Zugriff auf die Datenquelle initialisiert.

Zum Seitenanfang

Eigenschaften

  Name Beschreibung
Öffentliche Eigenschaft ConnectionString Ruft einen Wert ab, der die Verbindungszeichenfolge für die Datenquelle darstellt.
Öffentliche Eigenschaft DataAccessMethod Ruft die Methode ab, die für den Zugriff auf die Datenquelle verwendet wird.
Öffentliche Eigenschaft DataSourceSettingName Ruft einen Wert mit dem Namen der Einstellung ab, die zum Identifizieren von Datenquellen-Verbindungsinformationen verwendet wird, die in einer Konfigurationsdatei gespeichert sind.
Öffentliche Eigenschaft ProviderInvariantName Ruft einen Wert ab, der den Datenanbieter der Datenquelle darstellt.
Öffentliche Eigenschaft TableName Ruft einen Wert mit dem Namen der Tabelle ab, die Daten bereitstellt.
Öffentliche Eigenschaft TypeId Bei Implementierung in einer abgeleiteten Klasse wird ein eindeutiger Bezeichner für dieses Attribute abgerufen. (Von Attribute geerbt.)

Zum Seitenanfang

Methoden

  Name Beschreibung
Öffentliche Methode Equals Infrastruktur. Gibt einen Wert zurück, der angibt, ob diese Instanz einem angegebenen Objekt entspricht. (Von Attribute geerbt.)
Geschützte Methode Finalize Ermöglicht es einem Objekt, zu versuchen, Ressourcen freizugeben und führt andere Bereinigungsvorgänge aus, bevor es von Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche Methode GetHashCode Gibt den Hashcode für diese Instanz zurück. (Von Attribute geerbt.)
Öffentliche Methode GetType Ruft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche Methode IsDefaultAttribute Beim Überschreiben in einer abgeleiteten Klasse wird angegeben, ob der Wert dieser Instanz der Standardwert für die abgeleitete Klasse ist. (Von Attribute geerbt.)
Öffentliche Methode Match Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht. (Von Attribute geerbt.)
Geschützte Methode MemberwiseClone Erstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche Methode ToString Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)

Zum Seitenanfang

Felder

  Name Beschreibung
Öffentliches FeldStatischer Member DefaultDataAccessMethod Stellt die Standard-Datenzugriffsmethode dar.Dieses Feld ist schreibgeschützt.
Öffentliches FeldStatischer Member DefaultProviderName Stellt den Standard-Datenanbieternamen dar.Dieses Feld ist schreibgeschützt.

Zum Seitenanfang

Explizite Schnittstellenimplementierungen

  Name Beschreibung
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.GetIDsOfNames Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.GetTypeInfo Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können. (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.GetTypeInfoCount Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Von Attribute geerbt.)
Explizite SchnittstellenimplementierungPrivate Methode _Attribute.Invoke Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Von Attribute geerbt.)

Zum Seitenanfang

Hinweise

Die DataSourceAttribute-Klasse bietet zwei Möglichkeiten, Datenquelleninformationen für datengesteuerte Tests anzugeben. Die erste Methode gibt Informationen über eine Verbindungszeichenfolge, Informationen zum Anbieter und den Quelltabellennamen an, der an DataSourceAttribute übergeben wird.

Beispiel für eine Verbindungszeichenfolge:

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

Die zweite Möglichkeit besteht darin, ein einzelnes Argument an das Attribut zu übergeben, das die Konfigurationseinstellung angibt, die sich in der Datei app.config befindet.

Beispiel für Konfigurationseinstellungen:

[DataSource("dataSourceNameFromConfigFile")]

Tipp

Unterschiedliche Datenanbieter verwenden unterschiedliche Verbindungszeichenfolgen. Der Name des Anbieters ist ein Teil der Verbindungszeichenfolge.

Weitere Informationen zur Verwendung der Datei app.config für die Angabe einer Datenquelle finden Sie unter Exemplarische Vorgehensweise: Verwenden einer Konfigurationsdatei zum Definieren einer Datenquelle.

Weitere Informationen zu datengesteuerten Tests finden Sie unter Overview of Data-Driven Unit Tests.

Weitere Informationen über das Verwenden von Attributen finden Sie unter Erweitern von Metadaten mithilfe von Attributen.

Beispiele

Der folgende Code enthält die zu testende Klasse und Methode.

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

Der folgende Test ist erfolgreich. Es wird die Access-Datenbank sample.mdb verwendet, die in Table1 folgende Daten enthält.

Name

Saldo

Betrag

Jorg Bott

100

25

Pedro Ruivo

70

60

Mandar Samant

75

71.25

Russell King

159

158

Jun Cao

11.99

11.22

Beachten Sie, dass DataAccessMethod sequenziell arbeitet.

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

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Siehe auch

Referenz

Microsoft.VisualStudio.TestTools.UnitTesting-Namespace

DataAccessMethod

Weitere Ressourcen

Gewusst wie: Erstellen eines datengesteuerten Komponententests

How to: Configure a Data-Driven Unit Test

Erweitern von Metadaten mithilfe von Attributen