Dela via


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

  1. Om testprojektet redan har en app.config fil går du till Definiera ett anpassat konfigurationsavsnitt.

  2. 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.

  3. 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

  1. 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.

  2. Skapa ett -element i configSections-element.

  3. I avsnittet lägger du till ett attribut med namnet name och tilldelar det värdet microsoft.visualstudio.testtools. Lägg till ett annat attribut med namnet type och tilldela det värdet Microsoft.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

  1. Efter configSections-elementet, skapa ett connectionStrings-element.

  2. Skapa två add-element i elementet connectionStrings.

  3. 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

  1. Efter elementet connectionStrings skapar du ett microsoft.visualstudio.testtools element. Det här avsnittet skapades i avsnittet Definiera en anpassad konfiguration.

  2. I elementet microsoft.visualstudio.testtools skapar du ett dataSources--element.

  3. I elementet dataSources skapar du två addera-element.

  4. 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

  1. Skapa en Microsoft Access-databas med namnet testdatasource.accdb.

  2. Skapa en tabell och ge den namnet MyDataTable i testdatasource.accdb.

  3. Skapa två fält i MyDataTable med namnet Arg1 och Arg2 med hjälp av datatypen Number.

  4. Lägg till fem entiteter i MyDataTable med följande värden för Arg1 respektive Arg2: (10,50), (3,2), (6,0), (0,8) och (12312 1000).

  5. Spara och stäng databasen.

  6. Ä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

  1. Skapa ett Microsoft Excel-kalkylblad med namnet data.xlsx.

  2. Skapa ett blad med namnet Sheet1 om det inte redan finns i data.xlsx.

  3. Skapa två kolumnrubriker och ge dem namnet Val1 och Val2 i Sheet1.

  4. Lägg till fem entiteter i Sheet1 med följande värden för Val1 respektive Val2: (1,1), (2,2), (3,3), (4,4) och (5,0).

  5. Spara och stäng kalkylbladet.

  6. Ä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

  1. Lägg till ett enhetstest i testprojektet.

  2. 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"]);
            }
        }
    }
    
  3. Granska DataSource-attributen. Observera inställningsnamnen från filen app.config.

  4. 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.