2010-12-06 11 views
40

Visual Studio 2010, máquina x64, que utiliza el servidor web incorporado para alojar un servicio WCF con un conjunto de pruebas de unidad utilizando el marco de prueba incorporado.Archivo Xml que no se copia en el directorio de salida de prueba

Tengo un archivo XML que mis pruebas necesitan cargar para ejecutarse. He incluido este archivo en el proyecto de prueba y tengo el archivo configurado en 'contenido' y 'siempre copiar en el directorio de salida'. Este archivo se copia al directorio bin \ debug fine.

Cuando ejecuto las pruebas, sin embargo, el archivo xml no está allí. En lugar de buscar en la carpeta bin \ debug del proyecto, la busca en el directorio de trabajo de la prueba, C: \ Projects \ SAP Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out ". El archivo no se ha copiado allí. .

¿hay una manera de forzar este archivo a copiar, o necesito para calificar totalmente la referencia desde el interior de la prueba?

TIA!
James


actualización
Configuré el attrib DeploymentItem ute, pero el archivo aún no se copia. Pero eso parece ser lo que quiero ... ¿alguna idea de por qué eso no funciona?

Mi código de prueba:

[TestMethod] 
[DeploymentItem("SAP - GS3 format.xml")] 
public void TestProcessSapRoles() { 

    // I get a 'file not found' error here, and when 
    // I check the output directory, it isn't there 
    XElement rolesRoot = XElement.Load("SAP - GS3 format.xml"); 

} 


RESPUESTAS:
agradecimiento a CPedros, con su ayuda he zoom sobre esto un poco. Ejecuté el Monitor de procesos de SysInternals, para ver dónde estaba buscando mi archivo xml. Esto es lo que encontré:

Cuando me encontré con las pruebas usando Ctrl + R, Ctrl + T (pruebas de depuración en el contexto actual), Visual Studioignorados laDeploymentItem atribuyen completamente y ni siquiera intente para copiar el archivo en cualquier lugar. En este caso, recibí una excepción de "Archivo no encontrado" cuando traté de abrirlo para leerlo. Visual Studio creó un directorio de trabajo temporal para las pruebas, pero solo había un archivo en él, AgentRestart.dat.

Cuando ejecuté las pruebas usando el botón 'Ejecutar pruebas de unidad' en mi barra de herramientas (no estoy seguro de qué opción de prueba es), Visual Studio no copió el archivo, sino que lo hizo directamente desde el directorio del proyecto. La prueba pasó y no se creó ningún directorio de trabajo temporal.

Cuando ejecuté la prueba desde la opción de menú "ejecutar -> pruebas en contexto actual" (ejecutar, no depurar), se creó un directorio de trabajo temporal, y se copiaron el archivo xml y todos los archivos ejecutables. La prueba pasó.

Cuando edité Local.testsettings (en una carpeta de Elementos de solución en mi carpeta de pruebas), elegí 'Despliegue' en el menú de la izquierda y agregué el archivo xml. Se agregó como [directorio de la solución] \ [directorio del proyecto] \ archivo.xml. Eliminé el atributo DeploymentItem. Ahora pude depurar las pruebas; el archivo xml y todos los ejecutables se copiaron en el directorio temporal creado para la prueba.

TLDR: Visual Studio está ignorando el atributo DeploymentItem para ciertas formas de ejecutar la prueba.La solución es editar Local.testsettings, el menú Deployment y agregar el archivo a mano.

¡Gracias por la ayuda! Le doy crédito a CPedros por su respuesta, ya que fue el más útil para resolver esto.

+3

Awesome update, eres una estrella absoluta !! Apostaría más si pudiera ... – MalcomTucker

+1

Run Unit Tests me convenció. Buena pregunta. Gracias –

+1

@James B Frente a todo esto con Visual Studio 2012 Express edition, después de haber actualizado recientemente .NET 2.0 a .NET 4.5. Solo quería mostrar que SO realmente es un repositorio útil de información a largo plazo. Su actualización realmente me está ayudando a manejar esto. – DavidHyogo

Respuesta

20

Trate anotar su prueba con el atributo DeploymentItem: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

He aquí un fragmento de código a partir de la documentación:

[TestClass] 
    public class UnitTest1 
    { 
     [TestMethod()] 
     [DeploymentItem("testFile1.txt")] 
     public void ConstructorTest() 
     { 
      // Create the file to deploy 
      Car.CarInfo(); 
      string file = "testFile1.txt"; 
      // Check if the created file exists in the deployment directory 
      Assert.IsTrue(File.Exists(file), "deployment failed: " + file + 
       " did not get deployed"); 
     } 
    } 
+0

cpedros> Actualizo mi pregunta ... básicamente, parece que lo que dices es lo que quiero, pero para alguna razón todavía no copia. ¿Alguna idea de por qué eso no habría funcionado? –

+1

@James B. La notación DeploymentItem ("archivo.txt") depende del archivo que esté disponible en RelativePathRoot definido en .testrunconfig. Puede que esta no sea la ubicación del proyecto de prueba, en cuyo caso puede necesitar DeploymentItem ("YourTestProject \\ file.txt") –

+0

Consulte esto para obtener más información: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute (v = VS.100) .aspx –

0

He estado luchando con deploymentattribute desde hace un tiempo, y he tenido finalmente acaba de darse por vencido. En su lugar sólo estoy copiando manualmente los archivos a un directorio de prueba y luego borrarlos una vez terminado:

lugares

Archivoprueba:

método
Private _locationOfTestFilesToBeCopied As String = "C:\...\TestFilesToBeCopied" 
Private _locationOfTestFiles As String = "C:\...\TestFiles" 

Inicializar:

<TestInitialize()> 
Public Sub Setup() 
    DeleteCopiedTestFiles() 
    CopyTestFilesToTestDirectory() 
End Sub 

copiar y borrar métodos:

Private Sub CopyTestFilesToTestDirectory() 
    Dim sourceDirectory As New DirectoryInfo(_locationOfTestFilesToBeCopied) 

    For Each fileInfo As FileInfo In sourceDirectory.GetFiles 
     fileInfo.CopyTo(_locationOfTestFiles & "\" & fileInfo.Name, True) 
    Next 

    sourceDirectory = Nothing 
End Sub 

Private Sub DeleteCopiedTestFiles() 
    Dim sourceDirectory As New DirectoryInfo(_locationOfTestFiles) 

    For Each fileInfo As FileInfo In sourceDirectory.GetFiles 
     fileInfo.Delete() 
    Next 

    sourceDirectory = Nothing 
End Sub 

he encontrado que esto funciona bien

0

Me enfrentaba al problema de que uno de mis archivos no se copiaba a la carpeta de salida, incluso si ingresé ese nombre de archivo en local.testSettings y establecí la propiedad como "Copiar siempre".

Los siguientes pasos han resuelto mi problema: Menú

  1. Open Test
  2. Seleccione Configuración de prueba
  3. Seleccione la opción "Seleccionar archivo Configuración de pruebas"
  4. Seleccione su archivo de configuración .testsettings Abrir ventana del archivo
  5. Asegúrese de que el archivo seleccionado .testsettings esté marcado en Prueba -> Configuración de prueba

Espero que esto ayude a alguien.

Cuestiones relacionadas