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 :)