2010-06-13 7 views

Respuesta

6

Como sugiere rwwilden, la vida es mucho más fácil si utiliza una API basada en secuencias en lugar de una basada en archivos. Usar burlas no es muy apropiado aquí, IMO; no está haciendo "pruebas de protocolo", solo quiere una fuente de datos.

También puede proporcionar una sobrecarga que es un método simple utilidad:

public Result ParseXml(string file) 
{ 
    using (Stream stream = File.OpenRead(file)) 
    { 
     return ParseXml(stream); 
    } 
} 

A continuación, podría razonablemente segura no prueba que el método - que no tiene lógica significativa en ella, después de todo.

Ahora se podía prueba de la API basada en secuencia mediante una cadena codificada en el código, a continuación, llamar a Encoding.UTF8.GetBytes(xml) y la construcción de una MemoryStream alrededor de la matriz de bytes que resulta ... pero por lo general prefieren utilizar los archivos de datos independientes en mi proyecto de prueba. Establezca el tipo de contenido en "recurso incrustado" y luego use Assembly.GetManifestResourceStream para obtener una secuencia para el archivo de prueba.

Si esto es genuinamente un archivo XML normal, ¿realmente desea hacer el análisis usted mismo? ¿Hay alguna razón por la que no desee dejar eso en el marco y expresar su API en términos de DOM API, LINQ a XML o XmlReader?

+0

Para cualquier otra persona confundida acerca de cómo funciona la ruta aquí, parece ser algo como lo siguiente: 'Your.Project.Name.SubFolder.FileName.extension'. – crush

3

Todo lo que tiene que hacer es encontrar una manera de decirle a su clase qué archivo a leer. Entonces depende un poco de cómo se implementa su clase. El método más sencillo sería algo como esto:

public class ClassToTest : IClassToTest 
{ 
    public Result ParseXml(Stream xml) 
    { 
     // Parse xml and return result. 
     return ...; 
    } 
} 

[Test] 
public void TestParseXml() 
{ 
    // Get xml stream to test from somewhere. 
    Stream xmlStream = ...; 

    // Call method to test. 
    var result = new ClassToTest().ParseXml(xmlStream); 

    // Assert results. 
    Assert.IsNotNull(result); 
    ... 
} 

La idea es que de alguna manera se proporciona la clase que se está probando con un archivo XML que ha creado y para el que sabe lo que analiza los resultados a esperar.

+0

No quiero verificar la lectura del archivo. Solo quiero probar el análisis. ¿El sistema simulado puede ayudarme de alguna manera? –

+0

¿Tal vez podría proporcionar algún código del método o clase que le gustaría probar? –

Cuestiones relacionadas