Cuando construyo un proyecto de prueba unitaria antes de que se ejecuten las pruebas, el resultado de la prueba se copia en una carpeta TestResults y luego se ejecutan las pruebas. El problema que tengo es que no todos los archivos en el directorio Debug / bin se copian al proyecto TestResults.
¿Cómo puedo obtener un archivo que se copia en el directorio Debug / bin para que también se copie en la carpeta TestResults?
c#
.net
visual-studio-2008
unit-testing
mstest
Eric Schoonover
fuente
fuente
Puede especificar el atributo de implementación como un ejemplo que se muestra a continuación; También debe establecer la propiedad "Contenido" y "Copiar si es más reciente" (no hay documentación sobre la configuración posterior, pero la ha configurado para que funcione).
fuente
Tuve que activar "Habilitar implementación"
Test -> Edit Test Settings -> Local -> Deployment
para que el[DeploymentItem]
atributo funcione.fuente
Las tres respuestas son correctas, según sus necesidades.
Agregar archivos para implementar en .testrunconfig (.testsettings en VS2010) copiará todos esos archivos en cada carpeta de salida de prueba, incluso para pruebas no relacionadas que se ejecutan de forma aislada. Si ejecuta una prueba, todos los archivos de datos de prueba enumerados en la sección de implementación de .testssettings se copiarán en la carpeta de salida de prueba.
En mis pruebas, necesito copiar un archivo XML esperado en la carpeta de salida de prueba para compararlo con el XML de salida de prueba real. Uso el atributo DeploymentItem para copiar solo el archivo XML relacionado con las pruebas que se ejecutan. En VS2010 tuve que habilitar la implementación en el archivo .testsettings (pero no agregar ninguna ruta) y luego hacer referencia a la ruta del archivo XML en relación con el TestProject en el DeploymentItem.
Espero que esto ayude.
fuente
Tuve un problema similar, pero el mío tuvo que ver con señalar el archivo TraceAndTestImpact.testsettings en lugar del archivo Local.testsettings. Puede cambiar de uno a otro en el menú Prueba / Seleccionar configuración de prueba activa.
fuente
Me gustaría mejorar la respuesta aceptada mencionando una forma de implementarla específicamente para dll en lugar del método normal de usarla para datos o configuración, etc., para las circunstancias en las que CopyLocal no funciona:
fuente
Lo siguiente funciona en VS2012 para proyectos de prueba incluidos en múltiples soluciones sin usar un archivo de configuración de prueba:
1) Organice los archivos y carpetas que desea implementar en una carpeta en el directorio del proyecto de prueba.
2) En las propiedades del proyecto, cree un paso posterior a la compilación
$(ProjectDir)
y$(TargetDir)
son macros que serán interpretadas por VS y deben incluirse como tales.<Project_Folder_Name>
es el nombre de la carpeta creada en el paso 1.<Deployment_Folder_Name>
es el nombre de la carpeta en la que se implementarán los archivos de prueba y debe nombrarse de modo que sea único cuando se implementen varios proyectos de prueba en el mismo directorio, por ejemplo<Project_Name>_TestInputs
.Los archivos de prueba en ubicaciones compartidas también deben copiarse en la carpeta de implementación del directorio de destino para limitar las interacciones de prueba. Proporcione la ruta de origen relativa a la
$(ProjectDir)
macro. Por ejemplo"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
.3) Agregue una
[DeploymentItem(source, destination)]
propiedad a cada método de prueba que use un archivo de implementación (práctica recomendada) o a la clase de prueba (práctica más fácil para los perezosos o apresurados, y la forma más fácil de actualizar un proyecto, las rutas relativas utilizadas anteriormente o un archivo de configuración de prueba )En un método de prueba,
source
es la ruta al archivo o directorio utilizado en el método de prueba en relación con el directorio de destino creado porxcopy
ydestination
es la ruta al directorio en el que se creará en relación con el directorio de implementación. Para que las pruebas se ejecuten de manera consistente en el directorio de destino o en un directorio de implementación. La ruta de destino debe ser la misma que la ruta de origen sin una referencia de archivo. Ejemplo:[DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]
. ElDeploymentItem
debe incluirse en cada método que utiliza ese archivo o directorio.En una clase,
source
ydestination
son ambos el nombre de la carpeta creada en el directorio de destino porxcopy
; esto copiará la carpeta completa al directorio de implementación cuando se ejecute cualquier prueba en la clase. Ejemplo:[DeploymentItem("Example_TestInputs","Example_TestInputs")]
4) En los métodos de prueba, ahora puede acceder a archivos y directorios con la confianza de que estarán en el directorio de trabajo, independientemente de dónde Visual Studio haya decidido colocarlo ese día, por ejemplo
File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")
.fuente
Pruebe la línea de comando del evento Post-Build desde Visual Studio (si está usando ese IDE).
fuente
En Visual Studio 2012 no necesita un atributo DeploymentItem para el caso simple. Mira mi respuesta aquí
fuente
fuente
La respuesta aceptada es correcta y también lo son la mayoría de las otras respuestas. Sin embargo, a lo largo de los años, descubrí que el sistema Deploment de Visual Studio Unit Tests usa DeploymentAttribtue y Copy to Output es engorroso si tiene una gran cantidad de archivos de datos. He descubierto que mantener los archivos en su ubicación original funcionó mejor.
Detalles completos en mi otra respuesta aquí. https://stackoverflow.com/a/53004985/2989655
Espero que esto ayude.
fuente