2009-08-29 11 views
5

Sto scrivendo i test delle unità basate sui dati utilizzando un'origine dati Xml in C# VS2008.Estensione di Microsoft.VisualStudio.TestTools.DataSource.XML

Gli attributi hanno un aspetto simile a questo e tutto funziona in modo fantastico.

[DeploymentItem("HtmlSchemaUrls.xml")] 
    [DataSource("DataSource", "Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\HtmlSchemaUrls.xml", Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Sequential, "URL")] 
    [DataBinding("DataSource", "URL", "URL_Text", "DataSource.URL.URL_Text")] 
    [TestMethod] 

vorrei estendere le capacità del origine dati Microsoft.VisualStudio.TestTools.DataSource.XML, preferibilmente configurabile tramite App.config. Ad esempio, un bool quando è vero eseguo tutte le righe nel file Xml e quando è falso eseguo solo una.

Non voglio eseguire questo controllo nel caso di test stesso - Ho 1000s di casi di test con questo requisito.

Qualsiasi consiglio su come ottenere questo risultato sarebbe più apprezzato.

+1

Qualcosa sembra sbagliato se avete 1000s di test che colpiscono il file system (onestamente, a quel punto, stai facendo test di integrazione, no test dell'unità). Potresti prendere in considerazione l'idea di eseguire una sorta di derisione o di stub per isolare il codice che stai testando per quei casi in cui hai bisogno di una sola riga di XML. – Michael

risposta

1

Utilizzare AssemblyInitialize per copiare il set di test XML da qualche repository di set di test.
1 - in questo modo non è necessario [DeploymentItem ("HtmlSchemaUrls.xml")]
2 - invece di copiarlo, creare un nuovo file contenente i record da testare (utilizzando xsl parametrizzato?)
3 - tutti i parametri per il funzionamento che possono essere immagazzinate nella vostra app.config

esempio abbreviato (con copia semplice per preparare il basati su dati di test case ENV:

[AssemblyInitialize()] 
public static void AssemblyInit(TestContext context) 
{ 
    ... 
    string strRelocatedTestCaseFile = 
    Path.Combine(TheToolBox.ShortPath(AppDomain.CurrentDomain.BaseDirectory),                   
       "TestCase.xml"); 
    if(!string.IsNullOrEmpty(strTestCaseFile)) 
    { 
    string strMessage = "Copying TestCase input file: '" + 
         strTestCaseFile + "' to '" + strRelocatedTestCaseFile + "'"; 
    Console.WriteLine(strMessage); 
    File.Copy(strTestCaseFile, strRelocatedTestCaseFile, true); 
    } 
} 
+0

Questa è una buona idea, ma viene sbloccata perché 'DataSource' esegue il bind dei dati ** prima che ** AssemblyInitialize venga eseguito anche. Il test sarà sempre bloccato utilizzando una versione "vecchia" del file di origine dei dati. – Snixtor