2009-10-14 17 views
5

Todas: Tengo una prueba de unidad que está probando la funcionalidad que requiere un archivo de entrada. Esta prueba fue construida usando la función de prueba de unidad incorporada de VS 2008.Pruebas unitarias con un archivo de entrada

Mi problema es que el archivo debe ser detectable por la unidad de prueba. Sin embargo, cuando se ejecuta la prueba, se ejecuta desde un directorio de "salida" temporal en la carpeta de resultados de la prueba. No puede encontrar mi archivo de entrada.

He agregado el archivo al proyecto de prueba de la unidad, con una acción de compilación de "ninguno" y una opción de copiar al directorio de salida de "copiar si es nuevo", pero la copia se produce en el directorio de salida VS normal (en bin), y no al directorio de ejecución de prueba de la unidad, por lo que el archivo no se encuentra. No quiero codificar las rutas al archivo, ya que la prueba debe ejecutarse para cualquiera que verifique la prueba unitaria. Podría poner el archivo de entrada en una carpeta de solución, y dejar que el código de prueba "descubriera" el archivo codificando una ruta de acceso relativa en el árbol, pero pensé que tenía que ser un problema común, así que quería verificar si faltaba algo.

Respuesta

4

Agregue el archivo como un recurso a su conjunto de prueba. Luego puede cargarlo en tiempo de ejecución a través de Assembly.GetManifestResourceStream en su configuración de prueba.

Aquí es un método conveniente que utilizo para cargar recursos:

public static class ResLoader 
{   
    public static string AsString<T>(string resName) 
    { 
     using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T)) 
           .GetManifestResourceStream(resName))) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 
} 

T es cualquier clase contenidos en su aparato de pruebas.

3

Normalmente utilizo recursos externos como archivos y resultados de bases de datos en lugar de intentar acceder a ellos en mis pruebas de unidad. No siempre es fácil de hacer Tal vez si nos muestra el método en cuestión, podemos ayudarlo a que sea más comprobable por unidad.