Overzicht: Een configuratiebestand gebruiken om een gegevensbron te definiëren
In dit scenario ziet u hoe u een gegevensbron gebruikt die is gedefinieerd in een app.config-bestand voor eenheidstests. U leert hoe u een app.config-bestand maakt waarmee een gegevensbron wordt gedefinieerd die kan worden gebruikt door de DataSourceAttribute-klasse. Taken die in dit scenario worden gepresenteerd, zijn onder andere:
Een app.config-bestand maken.
Een aangepaste configuratiesectie definiëren.
Verbindingsreeksen definiëren.
De gegevensbronnen definiëren.
Toegang tot de gegevensbronnen met behulp van de DataSourceAttribute-klasse.
Notitie
DataSourceAttribute wordt momenteel alleen ondersteund in .NET Framework.
Voorwaarden
U hebt het volgende nodig om deze walkthrough te voltooien:
Visual Studio Enterprise
Microsoft Access of Microsoft Excel om gegevens op te geven voor ten minste één van de testmethoden.
Een Visual Studio-oplossing die een testproject bevat.
Een app.config-bestand toevoegen aan het project
Als uw testproject al een app.config-bestand heeft, gaat u naar Een aangepaste configuratiesectie definiëren.
Klik met de rechtermuisknop op het testproject in Solution Explorer-en selecteer >Nieuw item toevoegen.
Het venster Nieuw item toevoegen wordt geopend. Als u niet alle itemsjablonen ziet, kiest u Alle sjablonen weergevenen kiest u vervolgens de itemsjabloon.
Selecteer de sjabloon Application Configuration File en klik op Add.
Een aangepaste configuratiesectie definiëren
Bekijk het bestand app.config. Deze bevat ten minste de XML-declaratie en een hoofdelement.
De aangepaste configuratiesectie toevoegen aan het app.config-bestand
Het hoofdelement van app.config moet het configuratie- element zijn. Maak een configSections-element in het configuratie--element. De configSections- moet het eerste element in het app.config-bestand zijn.
Maak binnen het configSections-element een sectie-element aan.
Voeg in de sectie element een kenmerk toe met de naam
name
en wijs het toe aan een waarde vanmicrosoft.visualstudio.testtools
. Voeg een ander kenmerk toe met de naamtype
en wijs het toe aan een waarde vanMicrosoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
.
De sectie element moet er ongeveer als volgt uitzien:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
Notitie
De assemblynaam moet overeenkomen met de versie die u gebruikt.
Verbindingsreeksen definiëren
De verbindingsreeksen definiëren providerspecifieke informatie voor toegang tot gegevensbronnen. Verbindingsreeksen die zijn gedefinieerd in configuratiebestanden, bieden herbruikbare gegevensprovidergegevens in een toepassing. In deze sectie maakt u twee verbindingsreeksen die worden gebruikt door gegevensbronnen die zijn gedefinieerd in de sectie Aangepaste configuratie.
Voorzichtigheid
De verbindingsreeks kan gevoelige gegevens bevatten (bijvoorbeeld een wachtwoord). De verbindingsreeks wordt opgeslagen in tekst zonder opmaak in broncode en in de gecompileerde assembly. Beperk de toegang tot de broncode en assembly om deze gevoelige informatie te beveiligen.
Verbindingsreeksen definiëren
Nadat het configSections-element, maakt u een connectionStrings-element.
Maak binnen het connectionStrings-element twee add-elementen aan.
Maak in het eerste element de volgende kenmerken en waarden aan voor een verbinding met een Microsoft Access-database:
Attribuut | Waarden |
---|---|
name |
"MyJetConn" |
connectionString |
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" |
providerName |
"System.Data.OleDb" |
Maak in het tweede -element de volgende attributen en waarden aan voor een verbinding met een Microsoft Excel-spreadsheet.
Attribuut | Waarden |
---|---|
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
Het element connectionStrings moet er ongeveer als volgt uitzien:
<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>
Gegevensbronnen definiëren
De sectie gegevensbronnen bevat vier kenmerken die door de testengine worden gebruikt om gegevens op te halen uit een gegevensbron.
name
definieert de identiteit die wordt gebruikt door de DataSourceAttribute om op te geven welke gegevensbron moet worden gebruikt.connectionString
identificeert de verbindingsreeks die is gemaakt in de vorige sectie Verbindingsreeksen definiëren.dataTableName
definieert de tabel of het blad met de gegevens die in de test moeten worden gebruikt.dataAccessMethod
definieert de techniek voor het openen van gegevenswaarden in de gegevensbron.
In deze sectie definieert u twee gegevensbronnen voor gebruik in een eenheidstest.
Gegevensbronnen definiëren
Nadat het connectionStrings element, maakt u een microsoft.visualstudio.testtools element. Deze sectie is gemaakt in de sectie Een aangepaste configuratie definiëren.
Maak in de microsoft.visualstudio.testtools element een dataSources element.
Maak binnen het dataSources element twee toevoegen elementen.
In het eerste -element, voeg de volgende attributen en waarden toe voor een Microsoft Access-gegevensbron te maken.
Attribuut | Waarden |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
Maak in het tweede -element de volgende attributen en waarden voor een Microsoft Excel-gegevensbron aan:
Attribuut | Waarden |
---|---|
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
Het element microsoft.visualstudio.testtools moet er ongeveer als volgt uitzien:
<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>
Het uiteindelijke app.config-bestand moet er ongeveer als volgt uitzien:
<?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>
Een eenheidstest maken die gebruikmaakt van gegevensbronnen die zijn gedefinieerd in app.config
Nu een app.config-bestand is gedefinieerd, maakt u een eenheidstest die gebruikmaakt van gegevens in de gegevensbronnen die zijn gedefinieerd in het app.config-bestand. In deze sectie gaan we het volgende doen:
Maak de gegevensbronnen in het app.config-bestand.
Gebruik de gegevensbronnen in twee testmethoden waarmee de waarden in elke gegevensbron worden vergeleken.
Een Microsoft Access-gegevensbron maken
Maak een Microsoft Access-database met de naam testdatasource.accdb.
Maak een tabel en geef deze een naam
MyDataTable
in testdatasource.accdb-.Maak twee velden in
MyDataTable
met de naamArg1
enArg2
met behulp van het gegevenstypeNumber
.Voeg vijf entiteiten toe aan
MyDataTable
met de volgende waarden voor respectievelijkArg1
enArg2
: (10,50), (3,2), (6,0), (0,8) en (12312.1000).Sla de database op en sluit deze.
Wijzig de verbindingsreeks zodat deze verwijst naar de locatie van de database. Wijzig de waarde van
Data Source
zodat deze overeenkomt met de locatie van de database.
Een Microsoft Excel-gegevensbron maken
Maak een Microsoft Excel-spreadsheet met de naam data.xlsx.
Maak een blad met de naam
Sheet1
als het nog niet bestaat in data.xlsx.Maak twee kolomkoppen en noem ze
Val1
enVal2
inSheet1
.Voeg vijf entiteiten toe aan
Sheet1
met de volgende waarden voor respectievelijkVal1
enVal2
: (1,1), (2,2), (3,3), (4,4) en (5,0).Sla het werkblad op en sluit het.
Wijzig de verbindingsreeks zodat deze verwijst naar de locatie van het werkblad. Wijzig de waarde van
dbq
om de locatie van het werkblad weer te geven.
Een eenheidstest maken met behulp van de app.config gegevensbronnen
Voeg een eenheidstest toe aan het testproject.
Vervang de automatisch gegenereerde inhoud van de eenheidstest door de volgende 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"]); } } }
Bekijk de kenmerken van DataSource. Let op de instellingsnamen uit het app.config-bestand.
Bouw uw oplossing en voer MyTestMethod- en MyTestMethod2-tests uit.
Belangrijk
Implementeer items zoals gegevensbronnen, zodat ze in de implementatiemap toegankelijk zijn voor de test.