Genomgång: Använda en konfigurationsfil för att definiera en datakälla
Den här genomgången visar hur du använder en datakälla som definierats i en app.config fil för enhetstestning. Du får lära dig hur du skapar en app.config fil som definierar en datakälla som kan användas av klassen DataSourceAttribute. Uppgifter som presenteras i den här genomgången är exempelvis följande:
Skapa en app.config fil.
Definiera ett anpassat konfigurationsavsnitt.
Definiera anslutningssträngar.
Definiera datakällorna.
Åtkomst till datakällorna med hjälp av klassen DataSourceAttribute.
Not
DataSourceAttribute stöds för närvarande endast i .NET Framework.
Förutsättningar
För att slutföra den här genomgången behöver du:
Visual Studio Enterprise
Antingen Microsoft Access eller Microsoft Excel för att tillhandahålla data för minst en av testmetoderna.
En Visual Studio-lösning som innehåller ett testprojekt.
Lägga till en app.config fil i projektet
Om testprojektet redan har en app.config fil går du till Definiera ett anpassat konfigurationsavsnitt.
Högerklicka på testprojektet i Solution Exploreroch välj sedan Lägg till>nytt objekt.
Fönstret Lägg till nytt objekt öppnas. Om du inte ser alla objektmallar väljer du Visa alla mallaroch väljer sedan objektmallen.
Välj mallen Programkonfigurationsfil och klicka på Lägg till.
Definiera ett anpassat konfigurationsavsnitt
Granska filen app.config. Den innehåller minst XML-deklarationen och ett rotelement.
Så här lägger du till det anpassade konfigurationsavsnittet i filen app.config
Rotelementet i app.config ska vara konfiguration element. Skapa ett konfigurationssektion inom konfigurationselementet. Elementet configSections bör vara det första i app.config-filen.
Skapa ett -element i configSections-element.
I avsnittet lägger du till ett attribut med namnet
name
och tilldelar det värdetmicrosoft.visualstudio.testtools
. Lägg till ett annat attribut med namnettype
och tilldela det värdetMicrosoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
.
Elementet i avsnitt bör se ut ungefär så här:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
Not
Sammansättningsnamnet måste matcha den version som du använder.
Definiera anslutningssträngar
Anslutningssträngarna definierar providerspecifik information för åtkomst till datakällor. Anslutningssträngar som definierats i konfigurationsfiler ger återanvändbar information om dataprovidern i ett program. I det här avsnittet skapar du två anslutningssträngar som ska användas av datakällor som definieras i avsnittet Anpassad konfiguration.
Försiktighet
Anslutningssträngen kan innehålla känsliga data (till exempel ett lösenord). Anslutningssträngen lagras i oformaterad text i källkoden och i den kompilerade sammansättningen. Begränsa åtkomsten till källkoden och sammansättningen för att skydda den här känsliga informationen.
Definiera anslutningssträngar
Efter configSections-elementet, skapa ett connectionStrings-element.
Skapa två add-element i elementet connectionStrings.
Lägg till det första -elementet och skapa följande attribut och värden för en anslutning till en Microsoft Access-databas:
Attribut | Värden |
---|---|
name |
"MyJetConn" |
connectionString |
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" |
providerName |
"System.Data.OleDb" |
I samband med att du lägger till det andra --elementet, skapa följande attribut och värden för en anslutning till ett Microsoft Excel-kalkylblad:
Attribut | Värden |
---|---|
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
Elementet connectionStrings bör se ut ungefär så här:
<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>
Definiera datakällor
Avsnittet datakällor innehåller fyra attribut som används av testmotorn för att hämta data från en datakälla.
name
definierar den identitet som används av DataSourceAttribute för att ange vilken datakälla som ska användas.connectionString
identifierar anslutningssträngen som skapades i föregående avsnitt Definiera anslutningssträngar.dataTableName
definierar tabellen eller bladet som innehåller de data som ska användas i testet.dataAccessMethod
definierar tekniken för åtkomst till datavärden i datakällan.
I det här avsnittet definierar du två datakällor som ska användas i ett enhetstest.
Definiera datakällor
Efter elementet connectionStrings skapar du ett microsoft.visualstudio.testtools element. Det här avsnittet skapades i avsnittet Definiera en anpassad konfiguration.
I elementet microsoft.visualstudio.testtools skapar du ett dataSources--element.
I elementet dataSources skapar du två addera-element.
I det första -tillägget,-elementet, ska du skapa följande attribut och värden för en Microsoft Access-datakälla:
Attribut | Värden |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
I det andra -lägg till-element, lägg till följande attribut och värden för en Microsoft Excel-datakälla:
Attribut | Värden |
---|---|
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
Elementet microsoft.visualstudio.testtools bör se ut ungefär så här:
<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>
Den sista app.config filen bör se ut ungefär så här:
<?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>
Skapa ett enhetstest som använder datakällor som definierats i app.config
Nu när en app.config fil har definierats skapar du ett enhetstest som använder data som finns i de datakällor som definieras i filen app.config. I det här avsnittet kommer vi att:
Skapa de datakällor som finns i filen app.config.
Använd datakällorna i två testmetoder som jämför värdena i varje datakälla.
Skapa en Microsoft Access-datakälla
Skapa en Microsoft Access-databas med namnet testdatasource.accdb.
Skapa en tabell och ge den namnet
MyDataTable
i testdatasource.accdb.Skapa två fält i
MyDataTable
med namnetArg1
ochArg2
med hjälp av datatypenNumber
.Lägg till fem entiteter i
MyDataTable
med följande värden förArg1
respektiveArg2
: (10,50), (3,2), (6,0), (0,8) och (12312 1000).Spara och stäng databasen.
Ändra anslutningssträngen så att den pekar på databasens plats. Ändra värdet för
Data Source
så att det återspeglar databasens plats.
Skapa en Microsoft Excel-datakälla
Skapa ett Microsoft Excel-kalkylblad med namnet data.xlsx.
Skapa ett blad med namnet
Sheet1
om det inte redan finns i data.xlsx.Skapa två kolumnrubriker och ge dem namnet
Val1
ochVal2
iSheet1
.Lägg till fem entiteter i
Sheet1
med följande värden förVal1
respektiveVal2
: (1,1), (2,2), (3,3), (4,4) och (5,0).Spara och stäng kalkylbladet.
Ändra anslutningssträngen så att den pekar på kalkylbladets plats. Ändra värdet för
dbq
så att det återspeglar kalkylbladets plats.
Så här skapar du ett enhetstest med hjälp av app.config datakällor
Lägg till ett enhetstest i testprojektet.
Ersätt det automatiskt genererade innehållet i enhetstestet med följande kod:
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"]); } } }
Granska DataSource-attributen. Observera inställningsnamnen från filen app.config.
Skapa din lösning och kör testerna MyTestMethod och MyTestMethod2.
Viktig
Distribuera objekt som datakällor så att de är tillgängliga för testet i distributionskatalogen.