Exemplarische Vorgehensweise: Verwenden einer Konfigurationsdatei zum Definieren einer Datenquelle
Diese exemplarische Vorgehensweise veranschaulicht, wie eine in der Datei app.config definierte Datenquelle für Komponententests verwendet wird. Sie erfahren, wie die Datei app.config zum Definieren einer Datenquelle erstellt wird, die von der DataSourceAttribute-Klasse verwendet werden kann. Die folgenden Aufgaben werden in dieser exemplarischen Vorgehensweise vorgestellt:
Erstellen einer app.config Datei
Definieren eines benutzerdefinierten Konfigurationsabschnitts
Definieren von Verbindungszeichenfolgen
Definieren der Datenquellen
Zugreifen auf die Datenquellen über die DataSourceAttribute-Klasse
Hinweis
DataSourceAttribute wird derzeit nur für .NET Framework unterstützt.
Voraussetzungen
Um diese exemplarische Vorgehensweise nachzuvollziehen, benötigen Sie Folgendes:
Visual Studio Enterprise
Microsoft Access oder Microsoft Excel, um Daten für mindestens eine der Testmethoden bereitzustellen
Eine Visual Studio 2012-Projektmappe, die ein Testprojekt enthält.
Hinzufügen einer Datei „app.config“ zum Projekt
Wenn für das Testprojekt bereits eine app.config-Datei vorhanden ist, fahren Sie mit Definieren eines benutzerdefinierten Konfigurationsabschnitts fort.
Klicken Sie erst mit der rechten Maustaste im Projektmappen-Explorer auf das Testprojekt und anschließend mit der Linken auf Hinzufügen>Neues Element.
Das Fenster Neues Element hinzufügen wird geöffnet. Wenn nicht alle Elementvorlagen angezeigt werden, wählen Sie Alle Vorlagen anzeigen und dann die Elementvorlage aus.
Wählen Sie die Vorlage Anwendungskonfigurationsdatei aus, und klicken Sie dann auf Hinzufügen.
Definieren eines benutzerdefinierten Konfigurationsabschnitts
Sehen Sie sich die Datei app.config an. Sie enthält mindestens die XML-Deklaration und ein Stammelement.
So fügen Sie der Datei „app.config“ den benutzerdefinierten Konfigurationsabschnitt hinzu
Das Stammelement von app.config sollte das configuration-Element sein. Erstellen Sie ein configSections-Element innerhalb des configuration-Elements. configSections sollte das erste Element in der Datei app.config sein.
Erstellen Sie innerhalb des configSections-Elements ein section-Element.
Fügen Sie im section-Element ein Attribut mit dem Namen
name
hinzu, und weisen Sie ihm den Wertmicrosoft.visualstudio.testtools
zu. Fügen Sie ein weiteres Attribut mit dem Namentype
hinzu, und weisen Sie ihm den WertMicrosoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
zu.
Das section-Element sollte wie folgt aussehen:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
Hinweis
Der Name der Assembly muss der von Ihnen verwendeten Version entsprechen.
Definieren von Verbindungszeichenfolgen
Die Verbindungszeichenfolgen definieren anbieterspezifische Informationen für den Zugriff auf Datenquellen. In Konfigurationsdateien definierte Verbindungszeichenfolgen enthalten wiederverwendbare Datenanbieterinformationen für eine Anwendung. In diesem Abschnitt erstellen Sie zwei Verbindungszeichenfolgen, die von den im Abschnitt „Benutzerdefinierte Konfiguration“ definierten Datenquellen verwendet werden.
Achtung
Die Verbindungszeichenfolge kann vertrauliche Daten (z. B. ein Kennwort) enthalten. Die Verbindungszeichenfolge wird im Nur-Text-Quellcode und in der kompilierten Assembly gespeichert. Beschränken Sie den Zugriff auf den Quellcode und die Assembly, um diese vertraulichen Informationen zu schützen.
So definieren Sie Verbindungszeichenfolgen
Erstellen Sie nach dem configSections-Element ein connectionStrings-Element.
Erstellen Sie innerhalb des connectionStrings-Elements zwei Hinzufügen-Elemente.
Erstellen Sie im ersten Hinzufügen-Element die folgenden Attribute und Werte für eine Verbindung mit einer Microsoft Access-Datenbank:
attribute | Werte |
---|---|
name |
"MyJetConn" |
connectionString |
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" |
providerName |
"System.Data.OleDb" |
Erstellen Sie im zweiten Hinzufügen-Element die folgenden Attribute und Werte für eine Verbindung mit einem Microsoft Excel-Arbeitsblatt:
attribute | Werte |
---|---|
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
Das connectionStrings-Element sollte in etwa wie folgt aussehen:
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>
Definieren von Datenquellen
Der Abschnitt „Datenquellen“ enthält vier Attribute, die von der Test-Engine zum Abrufen von Daten aus einer Datenquelle verwendet werden.
name
definiert die von DataSourceAttribute verwendete Identität, um die zu verwendende Datenquelle anzugeben.connectionString
bezeichnet die im vorhergehenden Abschnitt „Definieren von Verbindungszeichenfolgen“ erstellte Verbindungszeichenfolge.dataTableName
definiert die Tabelle oder das Blatt mit den im Test zu verwendenden Daten.dataAccessMethod
definiert die Technik für den Zugriff auf Datenwerte in der Datenquelle.
In diesem Abschnitt definieren Sie zwei Datenquellen für die Verwendung in einem Komponententest.
So definieren Sie Datenquellen
Erstellen Sie nach dem connectionStrings-Element ein microsoft.visualstudio.testtools-Element. Dieser Abschnitt wurde im Abschnitt „Definieren eines benutzerdefinierten Konfigurationabschnitts“ erstellt.
Erstellen Sie innerhalb des microsoft.visualstudio.testtools-Elements ein dataSources-Element.
Erstellen Sie innerhalb des dataSources-Elements zwei Hinzufügen-Elemente.
Erstellen Sie im ersten Hinzufügen-Element die folgenden Attribute und Werte für eine Microsoft Access-Datenquelle:
attribute | Werte |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
Erstellen Sie im zweiten Hinzufügen-Element die folgenden Attribute und Werte für eine Microsoft Excel-Datenquelle:
attribute | Werte |
---|---|
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
Das microsoft.visualstudio.testtools-Element sollte in etwa wie folgt aussehen:
<microsoft.visualstudio.testtools>
<dataSources>
<add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
<add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
</dataSources>
</microsoft.visualstudio.testtools>
Die endgültige Datei app.config sollte in etwa wie folgt aussehen:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
</configSections>
<connectionStrings>
<add name="MyJetConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" providerName="System.Data.OleDb" />
<add name="MyExcelConn" connectionString="Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" providerName="System.Data.Odbc" />
</connectionStrings>
<microsoft.visualstudio.testtools>
<dataSources>
<add name="MyJetDataSource" connectionString="MyJetConn" dataTableName="MyDataTable" dataAccessMethod="Sequential"/>
<add name="MyExcelDataSource" connectionString="MyExcelConn" dataTableName="Sheet1$" dataAccessMethod="Sequential"/>
</dataSources>
</microsoft.visualstudio.testtools>
</configuration>
Erstellen eines Komponententests mit in der Datei „app.config“ definierten Datenquellen
Nachdem die Datei app.config definiert ist, erstellen Sie einen Komponententest, für den Daten aus den in der Datei app.config definierten Datenquellen verwendet werden. In diesem Abschnitt wird Folgendes beschrieben:
Erstellen Sie die in der Datei app.config angegebenen Datenquellen.
Verwenden der Datenquellen in zwei Testmethoden, bei denen die Werte der beiden Datenquellen verglichen werden
So erstellen Sie eine Microsoft Access-Datenquelle
Erstellen Sie eine Microsoft Access-Datenbank mit dem Namen testdatasource.accdb.
Erstellen Sie eine Tabelle, und nennen Sie sie
MyDataTable
in testdatasource.accdb.Erstellen Sie in
MyDataTable
zwei Felder mit dem NamenArg1
undArg2
mit dem DatentypNumber
.Fügen Sie
MyDataTable
fünf Entitäten mit den folgenden Werten fürArg1
undArg2
: (10,50), (3,2), (6,0), (0,8) bzw. (12312,1000).Speichern und schließen Sie die Datenbank.
Ändern Sie die Verbindungszeichenfolge, um auf den Speicherort der Datenbank zu verweisen. Ändern Sie den Wert von
Data Source
, um den Speicherort der Datenbank anzugeben.
So erstellen Sie eine Microsoft Excel-Datenquelle
Erstellen Sie ein Microsoft Excel-Arbeitsblatt mit dem Namen data.xlsx.
Erstellen Sie ein Arbeitsblatt mit dem Namen
Sheet1
, falls dieses noch nicht in data.xlsx vorhanden ist.Erstellen Sie die zwei Spaltenüberschriften
Val1
undVal2
inSheet1
.Fügen Sie
Sheet1
fünf Entitäten mit folgenden Werten fürVal1
undVal2
hinzu: (1,1), (2,2), (3,3), (4,4) bzw. (5,0).Speichern und schließen Sie das Arbeitsblatt.
Ändern Sie die Verbindungszeichenfolge, um auf den Speicherort des Arbeitsblattes zu verweisen. Ändern Sie den Wert von
dbq
, um den Speicherort des Arbeitsblattes anzugeben.
So erstellen Sie einen Komponententest mit in der Datei „app.config“ definierten Datenquellen
Fügen Sie dem Testprojekt einen Komponententest hinzu.
Ersetzen Sie den automatisch generierten Inhalt des Komponententests durch folgenden Code:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace TestProject1 { [TestClass] public class UnitTest1 { private TestContext context; public TestContext TestContext { get { return context; } set { context = value; } } [TestMethod()] [DeploymentItem("MyTestProject\\testdatasource.accdb")] [DataSource("MyJetDataSource")] public void MyTestMethod() { int a = Int32.Parse(context.DataRow["Arg1"].ToString()); int b = Int32.Parse(context.DataRow["Arg2"].ToString()); Assert.AreNotEqual(a, b, "A value was equal."); } [TestMethod()] [DeploymentItem("MyTestProject\\data.xlsx")] [DataSource("MyExcelDataSource")] public void MyTestMethod2() { Assert.AreEqual(context.DataRow["Val1"], context.DataRow["Val2"]); } } }
Sehen Sie sich die DataSource-Attribute an. Beachten Sie die Einstellungsnamen aus der app.config-Datei.
Erstellen Sie die Projektmappe, und führen Sie die Tests „MyTestMethod“ und „MyTestMethod2“ aus.
Wichtig
Stellen Sie Elemente wie Datenquellen bereit, damit sie für den Test im Bereitstellungsverzeichnis zugänglich sind.