web-dev-qa-db-fra.com

Le fichier XML ne copie pas dans le répertoire de sortie de test

Visual Studio 2010, ordinateur x64, utilisant le serveur Web intégré pour héberger un service WCF avec un ensemble de tests unitaires à l'aide de la structure de test intégrée.

J'ai un fichier XML que mes tests doivent charger pour s'exécuter. J'ai inclus ce fichier dans le projet test et le fichier est défini sur "contenu" et "toujours copier dans le répertoire de sortie". Ce fichier est copié dans le répertoire bin\debug fin.

Lorsque j'exécute les tests, toutefois, le fichier XML n'est pas là. Au lieu de chercher dans le dossier bin\debug du projet, il le recherche dans le répertoire de travail du test, C:\Projects\SAP Reapprovals\TestResults\name_machine 2010-12-06 13_45_43\Out ". Le fichier n'y a pas été copié. .

Existe-t-il un moyen de forcer la copie de ce fichier ou dois-je qualifier complètement la référence dans le test?

TIA!
James


Mettre à jour
J'ai défini l'attribut DeploymentItem, mais le fichier ne copie toujours pas. Mais ça ressemble sûrement à ce que je veux… des idées pour lesquelles ça ne marche pas?

Mon code de test:

[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");

}


RÉPONSES:
Merci à CPedros, avec son aide, j'ai un peu zoomé dessus. J'ai couru le moniteur de processus de SysInternals pour voir où il cherchait mon fichier xml. Voici ce que j'ai trouvé:

Quand j’ai exécuté les tests avec ctrl + r, ctrl + t (tests de débogage dans le contexte actuel), visual Studio ignoré la DeploymentItem attribuer complètement et n'a même pas essayer copier le fichier n'importe où. Dans ce cas, j'ai eu une exception "Fichier non trouvé" lorsque j'ai essayé de l'ouvrir en lecture. Visual studio a créé un répertoire de travail temporaire pour les tests, mais il ne contenait qu'un fichier, AgentRestart.dat.

Lorsque j'ai exécuté les tests à l'aide du bouton "Exécuter les tests unitaires" dans la barre d'outils (je ne sais pas quelle option de test utiliser), Visual Studio n'a pas copié le fichier, mais l'a référencé directement à partir du répertoire du projet. Le test a réussi et aucun répertoire de travail temporaire n'a été créé. 

Lorsque j'ai exécuté le test à partir de l'option de menu "Exécuter -> Tests dans le contexte actuel" (exécution, pas de débogage), un répertoire de travail temporaire a été créé et le fichier xml ainsi que tous les exécutables y ont été copiés. Le test a réussi. 

Lorsque j'ai modifié Local.testsettings (sous un dossier Éléments de solution sous mon dossier de tests), j'ai choisi "Déploiement" dans le menu de gauche et ajouté le fichier xml. Il a été ajouté en tant que [répertoire de solutions]\[répertoire de projets]\fichier.xml. J'ai supprimé l'attribut DeploymentItem. Maintenant, je pouvais déboguer les tests; le fichier xml et tous les exécutables ont été copiés dans le répertoire temporaire créé pour le test.

TLDR: Visual Studio ignore l'attribut DeploymentItem pour certaines méthodes d'exécution du test. La solution consiste à éditer Local.testsettings, le menu Deployment, et à ajouter le fichier à la main. 

Merci pour l'aide! Je remercie CPedros pour sa réponse, car c’est la plus utile pour résoudre ce problème.

41
James King

Essayez d'annoter votre test avec l'attribut DeploymentItem: http://msdn.Microsoft.com/en-us/library/Microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

Voici un extrait de code de la documentation:

  [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");
        }
    }
20
Pero P.

Je faisais face au problème, par exemple, un de mes fichiers n'était pas copié dans le dossier même si j'avais saisi ce nom dans Local.testSettings et que la propriété était définie sur "Copier toujours". 

Suivre les étapes a résolu mon problème: 

  1. Ouvrir le menu de test
  2. Sélectionnez les paramètres de test
  3. Sélectionnez l'option "Sélectionner le fichier de paramètres de test"
  4. Sélectionnez votre fichier .testsettings dans la fenêtre Ouvrir le fichier de paramètres
  5. Assurez-vous que le fichier .testsettings sélectionné est coché sous Test -> Paramètres de test 

J'espère que cela aidera quelqu'un.

0
CSharp

Cela fait un moment que je me bats avec les problèmes de déploiement et je viens enfin d'abandonner. Au lieu de cela, je copie simplement manuellement mes fichiers dans un répertoire de test, puis je les supprime une fois l'opération terminée:

Emplacements du fichier de test:

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

Méthode d'initialisation:

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

Méthodes de copie et de suppression:

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

J'ai trouvé cela fonctionne bien

0
majjam

cherchez à utiliser cet attribut sur les tests nécessitant le fichier XML:

http://msdn.Microsoft.com/en-us/library/Microsoft.visualstudio.testtools.unittesting.deploymentitemattribute.aspx

0
poindexter12