Procedura dettagliata: Uso di un file di configurazione per definire un'origine dati
Questa procedura dettagliata illustra come usare un'origine dati definita in un file app.config per gli unit test. Viene spiegato come creare un file app.config che definisce un'origine dati che può essere usata dalla classe DataSourceAttribute. Le attività incluse nella procedura dettagliata sono le seguenti:
Creazione di un file app.config.
Definizione di una sezione di configurazione personalizzata.
Definizione di stringhe di connessione.
Definizione di origini dati.
Accesso alle origini dati tramite la classe DataSourceAttribute.
Nota
DataSourceAttribute è attualmente supportato solo in .NET Framework.
Prerequisiti
Per completare questa procedura dettagliata, è necessario quanto segue:
Visual Studio Enterprise
Microsoft Access o Microsoft Excel per fornire dati per almeno uno dei metodi di test.
Soluzione Visual Studio contenente un progetto di test.
Aggiungere un file app.config al progetto
Se per il progetto di test esiste già un file app.config, passare a Definire una sezione di configurazione personalizzata.
Fare clic con il pulsante destro del mouse sul progetto di test in Esplora soluzioni e quindi selezionare Aggiungi>Nuovo elemento.
Verrà visualizzata la finestra Aggiungi nuovo elemento. Se non vengono visualizzati tutti i modelli di elemento, scegliere Mostra tutti i modelli e quindi scegliere il modello di elemento.
Selezionare il modello File di configurazione dell'applicazione e fare clic su Aggiungi.
Definire una sezione di configurazione personalizzata
Esaminare il file app.config. Il file contiene almeno la dichiarazione XML e un elemento radice.
Per aggiungere la sezione di configurazione personalizzata nel file app. config
L'elemento radice di app.config deve essere l'elemento configuration. Creare un elemento configSections all'interno dell'elemento configuration. configSections deve essere il primo elemento nel file app.config.
All'interno dell'elemento configSections creare un elemento section.
Nell'elemento section aggiungere un attributo denominato
name
e assegnare all'attributo il valoremicrosoft.visualstudio.testtools
. Aggiungere un altro attributo denominatotype
e assegnare il valoreMicrosoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions
.
L'elemento section dovrebbe essere simile al seguente:
<section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions" />
Nota
Il nome dell'assembly deve corrispondere alla versione in uso.
Definire le stringhe di connessione
Le stringhe di connessione definiscono informazioni specifiche del provider per l'accesso alle origini dati. Le stringhe di connessione definite nei file di configurazione forniscono informazioni sui provider di dati riutilizzabili nell'ambito di un'applicazione. In questa sezione vengono create due stringhe di connessione che verranno usate dalle origini dati definite nella sezione di configurazione personalizzata.
Attenzione
Il stringa di connessione può contenere dati sensibili, ad esempio una password. Il stringa di connessione viene archiviato in testo normale nel codice sorgente e nell'assembly compilato. Limitare l'accesso al codice sorgente e all'assembly per proteggere queste informazioni riservate.
Per definire le stringhe di connessione
Dopo l'elemento configSections creare un elemento connectionStrings.
All'interno dell'elemento connectionStrings creare due elementi add.
Nel primo elemento add creare i seguenti attributi e valori per una connessione a un database di Microsoft Access:
Attributo | Valori |
---|---|
name |
"MyJetConn" |
connectionString |
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\testdatasource.accdb; Persist Security Info=False;" |
providerName |
"System.Data.OleDb" |
Nel secondo elemento add creare i seguenti attributi e valori per una connessione a un foglio di calcolo di Microsoft Excel:
Attributo | Valori |
---|---|
name |
"MyExcelConn" |
connectionString |
"Dsn=Excel Files;dbq=data.xlsx;defaultdir=.\; driverid=790;maxbuffersize=2048;pagetimeout=5" |
providerName |
"System.Data.Odbc" |
L'elemento connectionStrings dovrebbe essere simile al seguente:
<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>
Definire le origini dati
La sezione relativa alle origini dati contiene quattro attributi usati dal motore di test per recuperare i dati da un'origine dati.
name
definisce l'identità usata da DataSourceAttribute per specificare l'origine dati da usare.connectionString
identifica la stringa di connessione creata nella sezione Definire le stringhe di connessione precedente.dataTableName
definisce la tabella o il foglio contenente i dati da usare nel test.dataAccessMethod
definisce la tecnica per l'accesso ai valori dei dati nell'origine dati.
In questa sezione vengono definite due origini dati da usare in uno unit test.
Per definire le origini dati
Dopo l'elemento connectionStrings, creare un elemento microsoft.visualstudio.testtools. Questa sezione è stata creata in Definire una sezione di configurazione personalizzata.
All'interno dell'elemento microsoft.visualstudio.testtools creare un elemento dataSources.
All'interno dell'elemento dataSources creare due elementi add.
Nel primo elemento add creare i seguenti attributi e valori per un'origine dati di Microsoft Access:
Attributo | Valori |
---|---|
name |
"MyJetDataSource" |
connectionString |
"MyJetConn" |
dataTableName |
"MyDataTable" |
dataAccessMethod |
"Sequential" |
Nel secondo elemento add creare i seguenti attributi e valori per un'origine dati di Microsoft Excel:
Attributo | Valori |
---|---|
Name |
"MyExcelDataSource" |
connectionString |
"MyExcelConn" |
dataTableName |
"Sheet1$" |
dataAccessMethod |
"Sequential" |
L'elemento microsoft.visualstudio.testtools dovrebbe essere simile al seguente:
<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>
Il file app.config finale dovrebbe essere simile al seguente:
<?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>
Creare uno unit test che usa le origini dati definite in app.config
Ora che è stato definito un file app.config, si creerà uno unit test che usa i dati che si trovano nelle origini dati definite nel file app. config. In questa sezione verranno eseguite le operazioni seguenti:
Creare le origini dati presenti nel file app.config.
Usare le origini dati in due metodi di test che confrontano i valori in ciascuna origine dati.
Per creare un'origine dati di Microsoft Access
Creare un database di Microsoft Access denominato testdatasource.accdb.
Creare una tabella e denominarla
MyDataTable
in testdatasource.accdb.Creare due campi in
MyDataTable
denominatiArg1
eArg2
usando il tipo di datiNumber
.Aggiungere cinque entità a
MyDataTable
con i valori seguenti perArg1
eArg2
, rispettivamente: (10,50), (3,2), (6,0), (0,8) e (12312,1000).Salvare e chiudere il database.
Cambiare la stringa di connessione in modo che punti al percorso del database. Cambiare il valore di
Data Source
in modo da riflettere il percorso del database.
Per creare un'origine dati di Microsoft Excel
Creare un foglio di calcolo di Microsoft Excel denominato data.xlsx.
Creare un foglio denominato
Sheet1
se non è già presente in data.xlsx.Creare due intestazioni di colonna e assegnare loro i nomi
Val1
eVal2
inSheet1
.Aggiungere cinque entità a
Sheet1
con i valori seguenti perVal1
eVal2
, rispettivamente: (1,1), (2,2), (3,3), (4,4) e (5,0).Salvare e chiudere il foglio di calcolo.
Cambiare la stringa di connessione in modo che punti al percorso del foglio di calcolo. Cambiare il valore di
dbq
in modo da riflettere il percorso del foglio di calcolo.
Per creare uno unit test usando le origini dati in app.config
Aggiungere uno unit test al progetto di test.
Sostituire il contenuto generato automaticamente dello unit test con il codice seguente:
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"]); } } }
Esaminare gli attributi DataSource. Si notino i nomi delle impostazioni nel file app.config.
Compilare la soluzione ed eseguire i test MyTestMethod e MyTestMethod2.
Importante
Distribuire gli elementi come origini dati in modo che siano accessibili al test nella directory di distribuzione.