Wenn ich ein Unit-Test-Projekt erstelle, bevor die Tests ausgeführt werden, wird die Testausgabe in einen TestResults-Ordner kopiert und anschließend werden die Tests ausgeführt. Das Problem ist, dass nicht alle Dateien im Debug / bin-Verzeichnis in das TestResults-Projekt kopiert werden.
Wie kann ich eine Datei, die in das Debug / bin-Verzeichnis kopiert wurde, auch in den TestResults-Ordner kopieren lassen?
c#
.net
visual-studio-2008
unit-testing
mstest
Eric Schoonover
quelle
quelle
Sie können das Bereitstellungsattribut wie im folgenden Beispiel angeben. Außerdem müssen Sie die Eigenschaften "Inhalt" und "Wenn neuer kopieren" festlegen (es gibt keine Dokumentation zu den späteren Einstellungen, aber Sie haben diese festgelegt, damit dies funktioniert.
quelle
Ich musste "Bereitstellung aktivieren" unter aktivieren,
Test -> Edit Test Settings -> Local -> Deployment
damit das[DeploymentItem]
Attribut funktioniert.quelle
Alle drei Antworten sind je nach Ihren Anforderungen richtig.
Durch Hinzufügen von Dateien zur Bereitstellung in der .testrunconfig (.testsettings in VS2010) werden alle diese Dateien in jeden Testausgabeordner kopiert, auch für nicht verwandte Tests, die isoliert ausgeführt werden. Wenn Sie einen Test ausführen, werden alle im Bereitstellungsabschnitt von .testssettings aufgeführten Testdatendateien in den Testausgabeordner kopiert.
In meinen Tests muss ich eine erwartete XML-Datei in den Testausgabeordner kopieren, um sie mit der tatsächlichen Testausgabe-XML zu vergleichen. Ich verwende das DeploymentItem-Attribut, um nur die XML-Datei zu kopieren, die sich auf die ausgeführten Tests bezieht. In VS2010 musste ich die Bereitstellung in der .testsettings-Datei aktivieren (aber keine Pfade hinzufügen) und dann auf den XML-Dateipfad relativ zum TestProject im DeploymentItem verweisen.
Hoffe das hilft.
quelle
Ich hatte ein ähnliches Problem, aber mein Problem hatte damit zu tun, dass auf die Datei TraceAndTestImpact.testsettings anstelle der Datei Local.testsettings verwiesen wurde. Sie können im Menü Test / Aktive Testeinstellungen auswählen von einem zum anderen wechseln.
quelle
Ich möchte die akzeptierte Antwort nur verbessern, indem ich eine Möglichkeit erwähne, sie speziell für DLLs bereitzustellen, anstatt die normale Methode, sie für Daten oder Konfigurationen usw. zu verwenden, für die Umstände, in denen CopyLocal nicht funktioniert:
quelle
Das Folgende funktioniert in VS2012 für Testprojekte, die in mehreren Lösungen enthalten sind, ohne eine Testeinstellungsdatei zu verwenden:
1) Ordnen Sie die Dateien und Ordner, die Sie bereitstellen möchten, in einem Ordner im Testprojektverzeichnis an.
2) Erstellen Sie in den Projekteigenschaften einen Post-Build-Schritt
$(ProjectDir)
und$(TargetDir)
sind Makros, die von VS interpretiert werden und als solche enthalten sein sollten.<Project_Folder_Name>
ist der Name des in Schritt 1 erstellten Ordners.<Deployment_Folder_Name>
ist der Name des Ordners, in dem die Testdateien bereitgestellt werden, und sollte so benannt werden, dass er eindeutig ist, wenn mehrere Testprojekte in demselben Verzeichnis bereitgestellt werden, z<Project_Name>_TestInputs
.Testdateien an freigegebenen Speicherorten sollten auch in den Zielverzeichnis-Bereitstellungsordner kopiert werden, um die Testinteraktionen einzuschränken. Geben Sie den Quellpfad relativ zum
$(ProjectDir)
Makro an. Zum Beispiel"$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml"
.3) Fügen Sie
[DeploymentItem(source, destination)]
entweder jeder Testmethode, die eine Bereitstellungsdatei verwendet (Best Practice) oder der Testklasse (einfachere Übung für Faule oder Eilige), eine Eigenschaft hinzu und aktualisieren Sie ein Projekt am einfachsten über die zuvor verwendeten relativen Pfade oder eine Testeinstellungsdatei ).Bei einer Testmethode
source
ist dies der Pfad zu der Datei oder dem Verzeichnis, die bzw. das in der Testmethode verwendet wird, relativ zum Zielverzeichnis, wie von erstellt,xcopy
unddestination
der Pfad zu dem Verzeichnis, in dem es relativ zum Bereitstellungsverzeichnis erstellt wird. Damit die Tests entweder im Zielverzeichnis oder in einem Bereitstellungsverzeichnis konsistent ausgeführt werden. Der Zielpfad sollte mit dem Quellpfad ohne Dateiverweis identisch sein. Beispiel :[DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]
. DasDeploymentItem
sollte in jeder Methode enthalten sein, die diese Datei oder dieses Verzeichnis verwendet.In einer Klasse
source
unddestination
sind beide der Name des Ordners, der im Zielverzeichnis von erstellt wurdexcopy
; Dadurch wird der gesamte Ordner in das Bereitstellungsverzeichnis kopiert, wenn ein Test in der Klasse ausgeführt wird. Beispiel:[DeploymentItem("Example_TestInputs","Example_TestInputs")]
4) In den Testmethoden können Sie jetzt sicher auf Dateien und Verzeichnisse zugreifen, die sich im Arbeitsverzeichnis befinden, unabhängig davon, wo Visual Studio sie an diesem Tag abgelegt hat, z
File.Exists(".\Example_TestInputs\C1219TDL-2008.xml")
.quelle
Probieren Sie die Post-Build-Ereignisbefehlszeile in Visual Studio aus (wenn Sie diese IDE verwenden).
quelle
In Visual Studio 2012 benötigen Sie für den einfachen Fall kein DeploymentItem-Attribut. Siehe meine Antwort hier
quelle
quelle
Die akzeptierte Antwort ist korrekt, ebenso wie die meisten anderen Antworten. Im Laufe der Jahre habe ich jedoch festgestellt, dass das Deploment-System von Visual Studio Unit Tests mit DeploymentAttribtue und Copy to Output umständlich ist, wenn Sie über eine große Anzahl von Datendateien verfügen. Ich habe festgestellt, dass es besser funktioniert, die Dateien an ihrem ursprünglichen Speicherort zu belassen.
Alle Details in meiner anderen Antwort hier. https://stackoverflow.com/a/53004985/2989655
Hoffe das hilft.
quelle