Ok - dieser Beitrag hier hat mir geholfen herauszufinden, was ich tun muss, ohne manuell Elemente zur .testsettings
Datei hinzufügen zu müssen .
Schritt 1 - Aktivieren Sie das MS Test- DeploymentItem
Attribut.
Zuerst müssen wir das DeploymentItem
Attribut aktivieren / aktivieren .
Goto TEST -> EDIT Testeinstellungen -> Aktuelle Aktive Einstellungen .. zB :: Local (local.testsettings)
Gehen Sie nun zu DEPLOYMENT und stellen Sie sicher, dass Enable Deployment aktiviert ist. (Standardmäßig ist es ausgeschaltet).
Schritt 2 - Überprüfen Sie die Eigenschaften der Datei
Jetzt müssen wir sicherstellen, dass die Datei, die Sie im Komponententest verwenden möchten, so eingerichtet ist, dass sie beim Kompilieren in das BIN-Verzeichnis kopiert wird. In einem MS Test-Komponententest können nur Dateien verwendet werden, die sich im BIN-Verzeichnis befinden. Warum? Da jedes Mal, wenn ein MS-Test ausgeführt wird, eine Kopie der Quellen erstellt werden muss, bedeutet dies, dass eine Kopie der aktuellen BIN-Verzeichnisdateien (für die aktuelle Konfiguration) erstellt wird.
Zum Beispiel ... Die aktuelle Konfiguration ist Debug (im Gegensatz zu Release).
Ich füge dann meine Datei hinzu ... (beachte die Ordnerstruktur im Projekt) ...
und stellen Sie dann sicher, dass diese Datei IMMER in das bin-Verzeichnis kopiert wird, wenn das Projekt kompiliert wird.
PRO TIPP: Immer kopieren funktioniert auch, aber kopieren Sie die Quelldatei immer über die Zieldatei. Auch wenn sie identisch sind. Deshalb bevorzuge ich Kopieren, wenn Neuere ... aber was auch immer Ihr Boot schwimmt
Ok, meine Damen und Herren - immer noch bei mir? Wikid.
Wenn wir kompilieren, sollte die Datei jetzt im Bin-Verzeichnis vorhanden sein ....
Schritt 3 - Verwenden Sie jetzt das Attribut DeploymentItem
Ok, jetzt können wir endlich das DeploymentItem
Attribut in unserem Code verwenden. Wenn wir dies tun, weist dies den MSTest an, die Datei (vom Speicherort relativ zum bin-Verzeichnis) in das neue MS Test-Verzeichnis zu kopieren ...
[TestMethod]
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
public void Parsing100LogFileEntriesReturnsANewParsedLogEntriesWith100Items()
{
// Arrange.
const string fileName = @"Test Data\100LogEntries.txt";
ILogEntryService logEntryService = new PunkBusterLogEntryService();
// Act.
var parsedLogEntries = logEntryService.ParseLogFile(fileName, 0);
// Assert.
Assert.IsNotNull(parsedLogEntries);
Assert.AreEqual(100, parsedLogEntries.LogEntries.Count);
// Snipped the remaining asserts to cut back on wasting your time.
}
Also lasst uns das zusammenfassen.
[TestMethod]
Wir alle wissen was das ist.
[DeploymentItem(@"Test Data\100LogEntries.txt", "Test Data")]
Beginnen Sie im bin-Verzeichnis, gehen Sie in den Test Data
Ordner und kopieren Sie die 100LogEntries.txt
Datei in einen Zielordner Test Data
im Stammverzeichnis von MS Test, das MS Test erstellt, wenn jeder Test ausgeführt wird.
So sieht meine Ausgabeordnerstruktur aus. (Entschuldigen Sie das ganze Durcheinander ...)
und voila! Wir haben Bereitstellungsdateien programmgesteuert.
PRO TIPP 2 - Wenn Sie kein zweites String-Argument im DeploymentItem
Attribut verwenden, wird die Datei in den Stamm-OUT-Ordner des aktuellen MS-Tests kopiert.
const string fileName = @"Test Data\100LogEntries.txt";
Jetzt ist der Pfad zur Datei relativ zum OUT
Ordner für den aktuellen MS-Test. Als solches habe ich explizit gesagt, dass ich die Datei in einem Verzeichnis namens ... bereitstellen soll, Test Data
also muss ich sicherstellen, dass ich das in meinem Code richtig referenziere, wenn ich die Datei einlesen möchte.
Nur zur Bestätigung -> Der vollständige Pfad dieses Dateinamens wird C:\lots of blah blah blah\My Solution\TestResults\PureKrome_PUREKROME-PC 2011-01-05 23_41_23\Out\Test Data
für diesen aktuellen MS-Test in etwas wie ... übersetzt .
HTH.
Habe jetzt ein Bild von einem Einhorn, um so viel zu lesen :)
DeploymentItem
, dass relative Pfade relativ zum "RelativeRootPath" in der Testkonfiguration oder in den Testeinstellungen gefunden werden. Standardmäßig ist dies der Lösungsordner. Ihre Dateien befinden sich nicht in "$ (SolutionDir) \ Test Data". Sie befinden sich in "$ (SolutionDir) \ Tests \ Test Data". Haben Sie Ihren RelativeRootPath geändert? oder sind die docs falsch? oder funktioniert deine Antwort durch eine andere Magie?Ich dachte, ich würde einen Weg teilen, wie ich auf Probleme mit MSTest und Bereitstellungselementen stieß. Wenn Sie Ihren Test ein zweites Mal oder öfter im Fenster "Testergebnisse" debuggen / ausführen, werden die Einstellungen aus einem vorherigen Lauf verwendet. Wenn Sie jedoch denselben Test im Fenster "Testansicht" debuggen / ausführen, werden die neuesten Einstellungen verwendet. Ich habe eine Stunde verloren, um herauszufinden, warum Änderungen an Local.testsettings nicht verwendet wurden, als ich Debug für denselben Test über das Fenster "Testergebnisse" gestartet habe.
Dies ist das Fenster Testergebnisse (starten Sie die Tests von hier aus nicht erneut, nachdem Sie Änderungen an Local.testsettings vorgenommen haben):
Und dies ist das Fenster Testansicht (starten Sie die Tests von hier aus, nachdem Sie Änderungen an Local.testsettings vorgenommen haben):
Ich hoffe, das erspart jemandem in Zukunft Kopfschmerzen.
quelle
In Visual Studio 2012 ist das Ausgabeverzeichnis das Arbeitsverzeichnis. Dies bedeutet, dass das DeploymentItem-Attribut für den allgemeinen Fall nicht benötigt wird (wenn Sie keine spezifischen Bereitstellungselemente pro Test oder Klasse haben). Dies bedeutet, dass Sie das DeploymentItem-Attribut nicht verwenden müssen, wenn es eine Reihe von Dateien gibt, die alle Ihre Tests verwenden sollen, oder wenn Sie nicht zu wählerisch sind, ob jede TestClass / TestMethod separate Bereitstellungsabhängigkeiten aufweist.
Sie können einfach auf Projekt | klicken Alle Dateien anzeigen und die Unterordner und Dateien in Visual Studio mit dem Attribut "Immer kopieren" oder "Wenn neuer kopieren" in Ihr Projekt aufnehmen. Die Dateien werden mit intakter Hierarchie in Ihr Ausgabeverzeichnis kopiert.
Gleiches gilt, wenn Sie vstest.console.exe über die Befehlszeile ausführen. Sehen Sie hier für die Details.
Aktualisieren
Es gibt Fälle, in denen das Standardverzeichnis nicht das Ausgabeverzeichnis ist. Insbesondere wenn Sie
Run All Tests
den Standardpfad auswählen , wird unterTestResults\Deploy_...
Gleiches gilt, wenn Sie einerunsettings
Datei verwenden oder Tests verwendenDeploymentItems
Das Ausgabeverzeichnis ist das Standardverzeichnis, wenn Sie DeploymentItems nicht verwenden, und: -
quelle
Wenn Sie in einzelnen Testfällen ein separates Bereitstellungselement benötigen, verwenden Sie bitte die
[DeploymentItem("string file path")]
Attribute in den einzelnen Testfällen.quelle
In meinem Fall füge ich das DeploymentItem-Attribut hinzu, das nicht sofort wirksam werden kann. Ich muss die Lösung schließen und erneut öffnen, damit die konfigurierten DeploymentItem-Attribute wirksam werden.
quelle
In VS.NET 2012 funktioniert dies standardmäßig
quelle
In VS 2012 müssen Sie lediglich die Datei log4net.properties (oder eine andere Konfigurationsdatei für log4net) kopieren, falls diese neuer ist. (Klicken Sie mit der rechten Maustaste auf die Datei log4net.properties, um die Eigenschaften aufzurufen und zu konfigurieren.)
quelle