2010-12-06 6 views
40

Visual Studio 2010, x64-Maschine, die den integrierten Webserver zum Hosten eines WCF-Dienstes mit einer Reihe von Komponententests mithilfe des integrierten Testframeworks verwendet.Xml-Datei kopiert nicht zum Testen des Ausgabeverzeichnisses

Ich habe eine XML-Datei, die meine Tests zum Ausführen laden müssen. Ich habe diese Datei in das Testprojekt aufgenommen und die Datei auf 'Inhalt' und 'Immer in Ausgabeverzeichnis kopieren' gesetzt. Diese Datei wird in das Verzeichnis bin \ debug fine kopiert.

Wenn ich die Tests ausführen, ist jedoch die XML-Datei nicht vorhanden. Anstatt in den Ordner bin \ debug des Projekts zu schauen, wird im Arbeitsverzeichnis des Tests nach C: \ Projekte \ SAP-Reapprovals \ TestResults \ name_machine 2010-12-06 13_45_43 \ Out gesucht. Die Datei wurde dort nicht kopiert .

zu kopieren gibt es eine Möglichkeit, diese Datei zu zwingen, oder muß ich aus der Prüfung die Referenz vollständig qualifizieren?

TIA!
James


aktualisiert
Ich setze die DeploymentItem attrib ute, aber die Datei wird immer noch nicht kopiert. Aber das sieht sicher so aus, wie ich will ... irgendwelche Ideen, warum das nicht funktioniert?

Mein Testcode:

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

} 


ANTWORTEN:
Dank CPedros gehen, mit seiner Hilfe habe ich auf dieser ein wenig vergrößert. Ich habe den Process Monitor von SysInternals ausgeführt, um zu sehen, wo er nach meiner XML-Datei gesucht hat. Hier ist, was ich gefunden habe:

Wenn ich die Tests liefen mit Strg + r, Strg + t (Debug-Tests im aktuellen Kontext), Visual Studio ignoriert dieDeploymentItem vollständig Attribut und nicht einmal Versuchen Sie, um die Datei überall zu kopieren. In diesem Fall habe ich die Ausnahme "Datei nicht gefunden" erhalten, als ich versuchte, sie zum Lesen zu öffnen. Visual Studio erstellte ein temporäres Arbeitsverzeichnis für die Tests, aber es war nur eine Datei darin enthalten, AgentRestart.dat.

Wenn ich die Tests mit der Schaltfläche 'Unit-Tests ausführen' in meiner Symbolleiste ausgeführt habe (nicht sicher, welche Testoption das ist), hat Visual Studio die Datei nicht kopiert, sondern direkt aus dem Projektverzeichnis referenziert. Der Test wurde bestanden und es wurde kein temporäres Arbeitsverzeichnis erstellt.

Wenn ich den Test über die Menüoption "run -> Tests im aktuellen Kontext" (run, nicht debug) ausgeführt habe, wurde ein temporäres Arbeitsverzeichnis erstellt und die xml-Datei und alle ausführbaren Dateien dorthin kopiert. Der Test ist bestanden.

Als ich Local.testsettings (in einem Solution Items-Ordner unter meinem Testordner) bearbeitet habe, wählte ich im linken Menü "Deployment" und fügte die XML-Datei hinzu. Es wurde als [Lösungsverzeichnis] ​​\ [Projektverzeichnis] ​​\ file.xml hinzugefügt. Ich habe das Attribut DeploymentItem entfernt. Jetzt konnte ich die Tests debuggen; Die XML-Datei und alle ausführbaren Dateien wurden in das für den Test erstellte temporäre Verzeichnis kopiert.

TLDR: Visual Studio ignoriert das Attribut DeploymentItem für bestimmte Möglichkeiten, den Test auszuführen.Die Lösung besteht darin, Local.testsettings, das Deployment Menü zu bearbeiten und die Datei manuell hinzuzufügen.

Danke für die Hilfe! Ich gebe CPedros Kredit für seine Antwort, da es am hilfreichsten war, dies zu lösen.

+3

Awesome Update, du bist ein absoluter Star !! Ich würde mehr upvote, wenn ich könnte ... – MalcomTucker

+1

Run Unit Tests hat den Trick für mich. Gute Frage. Danke, –

+1

@James B Facing all dies mit Visual Studio 2012 Express Edition, vor kurzem von .NET 2.0 auf .NET 4.5 aktualisiert. Ich wollte nur zeigen, dass SO wirklich eine nützliche langfristige Informationsquelle ist. Ihr Update hilft mir dabei, das Problem in den Griff zu bekommen. – DavidHyogo

Antwort

20

Versuchen Sie Ihr Test mit dem Attribut DeploymentItem Kommentierung: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute(v=VS.100).aspx

Hier ist ein Code-Schnipsel aus der Dokumentation:

[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> Ich aktualisiere meine Frage ... im Grunde sieht es so aus, was Sie sagen, was ich will, aber für Irgendein Grund hat es immer noch nicht kopiert. Irgendwelche Ideen, warum das nicht funktioniert hätte? –

+1

@ James B. Die Schreibweise DeploymentItem ("file.txt") hängt davon ab, welche Datei bei RelativePathRoot verfügbar ist, die in .testrunconfig definiert ist. Dies ist möglicherweise nicht der Standort Ihres Testprojekts. In diesem Fall benötigen Sie möglicherweise DeploymentItem ("YourTestProject \\ file.txt") –

+0

Überprüfen Sie dies für Details: http://msdn.microsoft.com/de-de/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute (v = VS.100) .aspx –

0

Ich habe seit einiger Zeit mit deploymentattribut gerungen, und habe fi eigentlich nur aufgegeben. Stattdessen bin ich nur das Kopieren von Hand meine Dateien über zu einem Testverzeichnis und dann einmal löschen sie fertig:

Testdatei Standorte:

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

Initialize-Methode:

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

Kopieren und Methoden löschen:

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 

ich gefunden habe, diese gut

0 funktioniert
0

Ich war mit dem Problem konfrontiert wie, eine meiner Datei wurde nicht in out-Ordner kopiert, auch wenn ich diesen Dateinamen in local.testSettings eingegeben und Eigenschaft als "Copy Always" festgelegt.

Folgende Schritte hat mein Problem gelöst:

  1. öffnen Testmenü
  2. Wählen Sie Testeinstellungen
  3. Wählen Sie die Option „Wählen Sie Testeinstellungen Datei“
  4. Wählen Sie .testsettings Datei von Einstellungen öffnen Fenster Datei
  5. Stellen Sie sicher, dass unter Test -> Testeinstellungen
die Datei Ausgewählte .testeinstellungen aktiviert ist

Hoffe, das wird jemandem helfen.

Verwandte Themen