2009-08-29 7 views
5

Estoy escribiendo pruebas de unidad de datos usando un origen de datos Xml en C# VS2008.Extender Microsoft.VisualStudio.TestTools.DataSource.XML

Los atributos se parecen a esto y todo funciona de maravilla.

[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] 

me gustaría ampliar las capacidades de la fuente de datos Microsoft.VisualStudio.TestTools.DataSource.XML, preferiblemente configurable a través de App.config. Por ejemplo, un bool cuando es verdadero, corro a través de todas las filas en el archivo Xml y cuando falso corro solo uno.

No quiero realizar esta verificación en el caso de prueba en sí - Tengo miles de casos de prueba con este requisito.

Cualquier orientación sobre cómo lograr esto sería muy apreciada.

+1

algo parece mal si usted tiene 1000s de pruebas que afectan al sistema de archivos (honestamente, en ese punto, estás haciendo pruebas de integración, no examen de la unidad). Es posible que desee considerar realizar algún tipo de burla o anotación para aislar el código que está probando para aquellos casos en los que solo necesita una línea de XML. – Michael

Respuesta

1

Use AssemblyInitialize para copiar su conjunto de pruebas XML de algún repositorio de conjuntos de pruebas.
1 - de esta manera, no necesita [DeploymentItem ("HtmlSchemaUrls.xml")]
2 - en lugar de solo copiarlo, cree un nuevo archivo que contenga los registros que necesita para probar (usando xsl parametrizado?)
3 - todos los parámetros para que la operación se puede almacenar en su app.config

ejemplo resumido (mediante copia simple de preparar los datos impulsadas caso de prueba 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

Esta es una buena idea, pero se despega porque 'DataSource' vincula los datos ** antes de ** AssemblyInitialize incluso se ejecuta. La prueba siempre se bloqueará utilizando una versión "anterior" del archivo fuente de datos. – Snixtor