visual unitarias unit tests test studio pruebas generate ejemplo basics c# .net visual-studio-2008 unit-testing mstest

c# - tests - ¿Cómo puedo obtener "Copiar en el directorio de salida" para que funcione con las pruebas unitarias?



unit test visual studio (10)

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 estoy teniendo es que no todos los archivos en el directorio Debug / bin se copian en el proyecto TestResults.

¿Cómo puedo hacer que un archivo que se copia en el directorio Debug / bin también se copie a la carpeta TestResults?


En Visual Studio 2012 no necesita un atributo DeploymentItem para el caso simple. Ver mi respuesta here


Las tres respuestas son correctas, dependiendo de sus necesidades.

Agregar archivos para implementar en .testrunconfig (.testsettings en VS2010) copiará todos esos archivos en cada carpeta de resultados 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 resultados de prueba.

En mis pruebas, necesito copiar un archivo XML esperado a la carpeta de salida de prueba para compararlo con el XML de salida de prueba real. Utilizo el atributo DeploymentItem para copiar solo el archivo XML relacionado con la (s) prueba (s) que se está (n) ejecutando. En VS2010 tuve que habilitar la implementación en el archivo .testsettings (pero no agregué ninguna ruta) y luego hacer referencia a la ruta del archivo XML relativa a TestProject en DeploymentItem.

Espero que esto ayude.


Lo siguiente funciona en VS2012 para proyectos de prueba incluidos en soluciones múltiples sin utilizar un archivo de ajustes 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, crea un paso de compilación posterior

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>/*" "$(TargetDir)<Deployment_Folder_Name>"

$(ProjectDir) y $(TargetDir) son macros que serán interpretados 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 para que sea único cuando se implementan múltiples 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 distribución del directorio de destino para limitar las interacciones de prueba. Proporcione la ruta de origen relativa a la macro $(ProjectDir) . Por ejemplo, "$(ProjectDir)../../Common Files/C1219TDL-2008.xml" .

3) Agregue una propiedad [DeploymentItem(source, destination)] a cada método de prueba que utiliza un archivo de implementación (práctica recomendada) o a la clase de prueba (práctica más fácil para el perezoso o apresurado, y la forma más fácil de actualizar un proyecto rutas relativas usadas previamente o un archivo de ajustes de prueba).

En un método de prueba, el source es la ruta al archivo o directorio utilizado en el método de prueba en relación con el directorio de destino creado por xcopy y el destination 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 forma coherente 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")] . El DeploymentItem debe incluirse en todos los métodos que usan ese archivo o directorio.

En una clase, el source y el destination son ambos el nombre de la carpeta creada en el directorio de destino por el xcopy ; 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 los archivos y directorios con la confianza de que estarán en el directorio de trabajo, independientemente de dónde haya decidido Visual Studio hacerlo ese día, por ejemplo, File.Exists("./Example_TestInputs/C1219TDL-2008.xml") .


Pruebe la línea de comando del evento Post-Build desde Visual Studio (si está usando ese IDE).


Puede especificar el atributo de despliegue 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 en las configuraciones posteriores, pero las ha configurado para que funcione).

[TestMethod] [DeploymentItem("mytestdata.xml")] public void UploadTest() { }


Quisiera simplemente mejorar la respuesta aceptada mencionando una forma de implementar específicamente para dll en lugar del método normal de usarlo para datos o configuración, etc., para las circunstancias en que CopyLocal no funciona:

[DeploymentItem("bin//release//iRock.dll")] [DeploymentItem("bin//debug//iRock.dll")]


Tuve que activar "Activar implementación" en Test -> Edit Test Settings -> Local -> Deployment para que funcione el atributo [DeploymentItem] .


Tuve un problema similar, pero el mío tenía que ver con señalar el archivo TraceAndTestImpact.testsettings en lugar del archivo Local.testsettings. Puede cambiar de uno a otro en el menú Probar / Seleccionar valores de prueba activos.


La forma estándar de hacerlo es especificando los elementos de implementación en el archivo .testrunconfig , al que se puede acceder mediante el elemento Editar configuraciones de ejecución de prueba en el menú Prueba de Visual Studio o en la carpeta Elementos de solución .


[TestMethod] [DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")] public void YourTestMethod() { // in the method you are testing you should have this: var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml"; }