visual tutorial temas studio para mejores las iconos extensiones español code visual-studio-2013 xunit.net

visual-studio-2013 - tutorial - temas para visual studio code



¿Cómo hacer referencia a los archivos de prueba de las pruebas de Xunit en Visual Studio? (4)

Bueno, típico, tan pronto como publico la pregunta, encuentro la respuesta yo mismo ...

Lo esencial es que la copia (Copia instantánea) de los ensamblados parece ser realizada por el framework .NET, no por Visual Studio o por Xunit.

Habíamos estado usando Assembly.Location para ubicar el archivo de ensamblaje y, por lo tanto, los archivos de prueba. Sin embargo, esto estaba mal, ya que nos dio la ubicación de los ensamblajes Copiados en la Sombra en lugar de los originales.

En su lugar, debe usar Assembly.CodeBase para obtener la ubicación del código de ensamblaje base. Sin embargo, esta es una URL (archivo), por lo que es necesario extraer la ruta de la URL. El nuevo código (C #) se ve así:

var codeBaseUrl = new Uri(Assembly.GetExecutingAssembly().CodeBase); var codeBasePath = Uri.UnescapeDataString(codeBaseUrl.AbsolutePath); var dirPath = Path.GetDirectoryName(codeBasePath); return Path.Combine(dirPath, relativePath);

... donde relativePath es la ruta relativa al directorio Bin/ .

Estamos usando Xunit para las pruebas. Estamos ejecutando nuestras pruebas a través de Visual Studio 2013 Test Runner, usando el complemento Xunit.

El problema es que algunas de las pruebas deben referirse a archivos en el sistema de archivos . Parece que Xunit (o el VS Test Runner, sin saber cuál), copia los ensamblajes, pero no los archivos de soporte en el directorio bin, a otro directorio antes de ejecutar las pruebas, por lo tanto, no se encuentran nuestros archivos de prueba. [El marco de prueba de MS especifica atributos para listar los archivos que se copiarán, pero Xunit no].

¿Cómo deshabilitar este comportamiento de copia o determinar de manera programática la ubicación del directorio bin/ original para recuperar los archivos?

Parece que la mayoría de las soluciones propuestas (incluso en el sitio de seguimiento de errores de Xunit) sugieren almacenar los archivos como recursos incrustados en lugar de archivos ''copiar siempre''. Sin embargo, esto no siempre es práctico, por ejemplo: probar el código de manipulación de archivos y (en un caso) el código que desea un archivo de base de datos Sqlite.


Después de buscar un poco, encontré la solución aquí: https://msdn.microsoft.com/en-us/library/ms182475.aspx .

En particular, el primer paso ha sido suficiente para mí:

Si son específicos de un proyecto de prueba, inclúyalos como archivos de contenido en el proyecto de prueba de Visual Studio. Selecciónelos en el Explorador de soluciones y establezca la propiedad Copiar en salida en Copiar si es más reciente.

asociado al siguiente código:

var filename = "./Resources/fake.pdf" File.OpenRead(filename)


Después de esforzarme por tratar de identificar directorios y copiar archivos (parece que hay varios directorios en juego y es difícil determinar cuál es el correcto), descubrí que simplemente puede desactivar la función de sombra; en ese punto, la unidad vuelve a probar el contenido de referencia en la carpeta bin / {configuración}.

Para hacerlo, siga las instrucciones here . Parece ser tan simple como configurar shadowCopy en falso:

{ "shadowCopy": false }

No tengo claro si esta configuración tiene interacciones adversas con otras configuraciones (por ejemplo, appDomain ). Si alguien lo sabe, sus comentarios serán bienvenidos.


Estoy ejecutando .Net Core 1.0 en Mac. Assembly.GetExecutingAssembly no está disponible. Yo uso el siguiente código en su lugar:

var location = typeof(YourClassName).GetTypeInfo().Assembly.Location; var dirPath = Path.GetDirectoryName(location); return Path.Combine(dirPath, relativePath);

relativePath es la ruta relativa al directorio de su DLL.