MSTest copiar archivo a la carpeta de ejecución de prueba


Tengo una prueba que requiere un archivo XML para ser leído y luego analizado. ¿Cómo puedo tener este archivo copiado en la carpeta de ejecución de prueba cada vez?

El archivo XML se establece en " Copy if newer "y un modo de compilación de" none " (ya que no es realmente una cosa capaz de compilar)

Author: BIBD, 2009-03-16

6 answers

Use a DeploymentItem atributo

using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using CarMaker;

namespace DeploymentTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod()]
        [DeploymentItem("testFile1.xml")]
        public void ConstructorTest()
        {
            string file = "testFile1.xml";
            Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
                " did not get deployed");
        }
    }
}
 124
Author: Preet Sangha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-22 17:06:21

Parece que si proporciona un archivo TestSettings para la Solución, puede desmarcar la opción "Habilitar implementación" y evitar que mstest intente ejecutarse desde la carpeta ...TestResults\...\out donde no copia sus archivos adicionales (a menos que los convierta en una opción de implementación).

Esto también es útil si depende de que los archivos adicionales estén en una estructura de carpetas conservada porque todos los elementos de implementación parecen estar copiados directamente (planos) en la carpeta de ejecución temporal (fuera). Opción de carpeta en TestSettings (las respuestas anteriores sugieren que puede mantener la estructura si agrega cada elemento como su propio DeploymentItem).

Para mí funcionó bien ejecutar pruebas directamente en Visual Studio (es decir, mis archivos adicionales en su estructura fueron encontrados y utilizados por las pruebas) porque había creado un archivo TestSettings por otra razón hace mucho tiempo (que ha Activado la implementación sin marcar), pero no cuando TeamCity ejecutó mstest para ejecutar pruebas porque no había especificado que el archivo TestSettings utilizar.

Para crear un archivo TestSettings en Visual Studio, haga clic derecho en la solución y elija Nuevo elemento, y seleccione la plantilla TestSettings. Para usar el archivo TestSettings en el símbolo del sistema de mstest.exe agregue la opción, /testsettings:C:\Src\mySolution\myProject\local.testsettings (o agregue como una opción de línea de comandos adicional en TeamCity con la ruta apropiada)

 22
Author: TamW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-12 00:58:13

La respuesta Preet se usa para implementar elementos para una sola prueba. Si desea hacerlo a nivel de solución, utilice el .testrunconfig settings .

 8
Author: Eric Bole-Feysot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-02 14:11:00

La mejor solución para mí es usar testsettings, especialmente si varias pruebas necesitan los mismos archivos de datos.

Primero cree un archivo testsettings y agregue los elementos de implementación que necesita (nombre de archivo o carpeta):

<TestSettings name="Local" id="00ebe0c6-7b64-49c0-80a5-09796270f111" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <Description>These are default test settings for a local test run.</Description>
  <Deployment>
    <DeploymentItem filename="Folder1\TestScripts\test.xml" outputDirectory="TestScripts"/>
    <DeploymentItem filename="Folder2\TestData\" outputDirectory="TestData"/>
  </Deployment>
<...../>
  • Ejecutándose en visual studio, use " seleccionar archivo de configuración de prueba "del menú" Prueba\Configuración de prueba " para seleccionar nuevas configuraciones de prueba

  • Al ejecutar mstest, use el parámetro / testsettings para que mstest use sus testsettings.

 3
Author: FrankyHollywood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-07 10:37:29

Puede definir DeploymentItem en una clase que contenga un método con el atributo AssemblyInitialize. Entonces está seguro de que los archivos se copian independientemente de la prueba que ejecute.

Desafortunadamente el atributo DeploymentItem solo se ejecuta en clases que contienen pruebas que está ejecutando. Así que si usted tiene 10 clases de prueba que utilizan el mismo conjunto de archivos, usted tiene que añadir el atributo a todos ellos.

También descubrió que cambia en *.los archivos testsettings no son automáticamente actualizado en Visual Studio. Por lo tanto, después de agregar archivos / carpetas a la implementación en testsettings, debe volver a abrir el archivo de la solución y luego ejecutar las pruebas.

 2
Author: Sielu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-27 10:28:23

En Visual Studio 2012, vstest.consola.exe (el corredor de prueba incorporado) se ejecuta con el directorio de salida como la ruta actual. Esto significa que solo necesita incluir los elementos en su solución con la propiedad 'Copiar siempre' o 'Copiar si es más reciente' para que sean utilizados por su prueba. No necesita el atributo DeploymentItem para el caso general. Lo mismo se aplica cuando se ejecuta vstest.consola.exe desde la línea de comandos dentro del directorio output/test.

Hay algunos casos en los que una se utiliza la carpeta, una de ellas es cuando se está utilizando el atributo DeploymentItem. Ver aquí para más información.

 2
Author: acarlon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-08 00:11:27