it-swarm.com.de

Wie bekomme ich "In Ausgabeverzeichnis kopieren", um mit Komponententests zu arbeiten?

Wenn ich ein Komponententestprojekt vor dem Ausführen der Tests erstelle, wird die Testausgabe in einen TestResults-Ordner kopiert und die Tests werden ausgeführt. Mein Problem ist, dass nicht alle Dateien im Verzeichnis Debug/bin in das TestResults-Projekt kopiert werden.

Wie kann ich eine Datei erhalten, die in das Verzeichnis Debug/bin kopiert wird, um auch in den Ordner TestResults kopiert zu werden?

121
Eric Schoonover

Die Standardmethode hierfür ist das Angeben der Elemente deploy in der Datei .testrunconfig, auf die über das Element Edit Test Run Configurations in Visual Studio zugegriffen werden kann. Test Menü oder im Ordner Solution Items

121
Mark Cidade

Sie können das Implementierungsattribut wie in einem Beispiel unten angegeben angeben. Außerdem müssen Sie die Eigenschaft "Content" und "Copy if newer" festlegen (in den späteren Einstellungen ist keine Dokumentation enthalten. Sie haben jedoch festgelegt, dass dies funktioniert. 

[TestMethod]
[DeploymentItem("mytestdata.xml")]
public void UploadTest()
{



}
57
Sanjay10

Ich musste "Enable Deployment" unter Test -> Edit Test Settings -> Local -> Deployment aktivieren, damit das [DeploymentItem]-Attribut funktioniert.

10
tomfanning

Alle drei Antworten sind abhängig von Ihren Bedürfnissen richtig. 

Durch das Hinzufügen von Dateien für die Bereitstellung in .testrunconfig (.testsettings in VS2010) werden alle diese Dateien in jeden Testausgabeordner kopiert, auch wenn unabhängige Tests getrennt ausgeführt werden. Wenn Sie einen Test ausführen, werden alle Testdatendateien, die im Abschnitt zur Bereitstellung von .testssettings aufgeführt sind, in den Testausgabeordner kopiert.

In meinen Tests muss ich eine erwartete XML-Datei in den Testausgabeordner kopieren, um sie mit der tatsächlichen XML-Testausgabe 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 den XML-Dateipfad relativ zum TestProject im DeploymentItem referenzieren.

Hoffe das hilft.

5
GraehamF

Ich hatte ein ähnliches Problem, aber ich hatte damit zu tun, auf die Datei TraceAndTestImpact.testsettings statt auf die Datei Local.testsettings zu verweisen. Sie können im Menü Test/Select Active Test Settings (Testeinstellungen auswählen) von einem zum anderen wechseln.

2
Simon

Möchte die akzeptierte Antwort nur verbessern, indem sie einen Weg erwähnt, um sie speziell für die Verwendung von DLLs bereitzustellen, und nicht auf die normale Methode, sie für Daten oder Konfigurationen usw. zu verwenden, wenn CopyLocal nicht funktioniert:

[DeploymentItem("bin\\release\\iRock.dll")]
[DeploymentItem("bin\\debug\\iRock.dll")]
1
JamesDill

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 Postbuild-Schritt

xcopy /Y /S /i "$(ProjectDir)<Project_Folder_Name>\*" "$(TargetDir)<Deployment_Folder_Name>"

$(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 zu beschränken. Geben Sie den Quellpfad relativ zum Makro $(ProjectDir) an. Zum Beispiel "$(ProjectDir)..\..\Common Files\C1219TDL-2008.xml".

3) Fügen Sie eine [DeploymentItem(source, destination)] -Eigenschaft entweder zu jeder Testmethode hinzu, die eine Bereitstellungsdatei verwendet (Best Practice), oder zu der Testklasse (einfachere Vorgehensweise für Faul- oder Eilige), und die einfachste Möglichkeit, ein Projekt wie zuvor zu aktualisieren verwendete relative Pfade oder eine Testeinstellungsdatei).

Bei einer Testmethode ist source der Pfad zu der Datei oder dem Verzeichnis, die bzw. das in der Testmethode verwendet wird, relativ zum Zielverzeichnis, das von xcopy erstellt wurde, und destination ist der Pfad zu das Verzeichnis, in dem es relativ zum Bereitstellungsverzeichnis erstellt wird. Damit werden die Tests entweder im Zielverzeichnis oder in einem Bereitstellungsverzeichnis konsistent ausgeführt. Der Zielpfad sollte mit dem Quellpfad ohne Dateiverweis identisch sein. Beispiel: [DeploymentItem("Example_TestInputs\C1219TDL-2008.xml","Example_TestInputs")]. Das DeploymentItem sollte in jeder Methode enthalten sein, die diese Datei oder dieses Verzeichnis verwendet.

In einer Klasse sind source und destination der Name des Ordners, der im Zielverzeichnis von xcopy erstellt wurde. 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) Bei den Testmethoden können Sie jetzt sicher auf Dateien und Verzeichnisse zugreifen, die sich im Arbeitsverzeichnis befinden, unabhängig davon, wo Visual Studio dies an diesem Tag festgelegt hat, z. File.Exists(".\Example_TestInputs\C1219TDL-2008.xml").

1
Richard Morris

In Visual Studio 2012 benötigen Sie kein DeploymentItem-Attribut für den einfachen Fall. Siehe meine Antwort hier

0
acarlon
[TestMethod]
[DeploymentItem("ProjectName/Folder/SubFolder/file.xml", "Folder/Subfolder")]
public void YourTestMethod()
{
   // in the method you are testing you should have this:
   var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) + "/Folder/Subfolder/file.xml";
}
0
Nina

Die akzeptierte Antwort ist korrekt und die meisten anderen Antworten auch. 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 war, die Dateien an ihrem ursprünglichen Speicherort zu halten. 

Vollständige Details in meiner anderen Antwort hier . https://stackoverflow.com/a/53004985/2989655

Hoffe das hilft.

0
Sau001

Testen Sie die Post-Build-Ereignisbefehlszeile in Visual Studio (wenn Sie diese IDE verwenden).

0
Kasper