Datei erstellen Während Unit Test - Kann Öffnen Sie es nicht zu schreiben - TestDriven.Net und NUnit

StackOverflow https://stackoverflow.com/questions/4670890

  •  10-10-2019
  •  | 
  •  

Frage

Ich bin einige Code zu testen, dass Bedürfnisse und Fileinfo Directory Objekt und anstelle von Schreib ein Wrapper und mehrere Schnittstellen zu verwenden, um dies zu lösen, dachte ich, es ist eine gute Idee, einige Dateien erstellen sein würde, wenn Sie den Test starten und dann diejenigen löschen Dateien nach dem Test durchgeführt wird. Dies ist die Art, wie ich erstellen Sie die Dateien:

public static void CreateTestSchedules(int quantity)
{
    String folder = Path.Combine(Directory.GetCurrentDirectory(), "FolderFiles");
    for(int quantity=10; quantity > 0; quantity--)
    {
       String filename = Path.GetTempFileName();
       using (FileStream fileStream = File.Create(Path.Combine(folder, filename)))
       {
            XDocument fileContent = Helper.CreateContent(filename);
            Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(fileContent.ToString());

            fileStream.Write(bytes, 0, bytes.Length);
            fileStream.Flush();
            fileStream.Close();
        }
     }
}

An diesem Punkt sehe ich kein Problem. Die Dateien im Ordner und alles sieht gut aus erstellt werden

Dann, wenn die Ausführung des Tests weiter, ich versuche zu öffnen eines dieser Datei zu schreiben etwas in ihm, und ich eine Ausnahme erhalten, welche die Datei, die ich zum Schreiben geöffnet werden soll wird von anderem Prozess verwendet wurde und, nachdem er mit genauer Überprüfung, ich das TestDriven.Net Prozess als man sehen, um die Datei zu blockieren. Dies ist der Code, den ich verwende, um Schreibdaten in die Datei zu öffnen und versuchen:

using (FileStream file = new FileStream(filename, FileMode.Append))
{
    Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(dataToWrite.ToString());
    if (file.CanWrite)
    {
        file.Write(bytes, 0, bytes.Length);
    }
}

Meine Frage ist: Warum ist das passiert? richtig ist nicht das Datei-Handle zu veröffentlichen? gibt es einen weg das Schloss von TestDriven.Net zu stehlen? sollte ich diese Dateien anders erschaffen? sollte ich den Test auf andere Weise schreiben?

Vielen Dank im Voraus für die Antworten und Kommentare =).

EDIT:

dieses spezielle Problem lösen (das eigentliche Problem, wie Dave Swersky erwähnt, ist, dass die Einheit Test sollte das Dateisystem nicht berühren) ich den Link von James Wiseman gesendet verwendet (nochmals vielen Dank James =) und die Datei mit einem Fileshare-Flag erstellt, auf diese Weise ich in die Datei zu erreichen, öffnen sie ihm eine Schreib zu. Wie folgt aus:

 using (FileStream fileStream = new FileStream( filename, FileMode.Create, FileAccess.ReadWrite, **FileShare.ReadWrite**))

Damit ich die in die Datei öffnen und schreiben kann. =)

War es hilfreich?

Lösung

Ich merke, Sie verwenden das FileStream Objekt direkt das Schreiben auszuführen.

Gibt es das gleiche Problem vorhanden, wenn Sie ein StreamWriter Objekt und Verwendung erstellen, die für die Dateioperationen (einschließlich der Nähe)?

Eine Suche auf Google drehte diesen Artikel nach oben. Sie kann es hilfreich finden. http://foson.blogspot.com/2007/10 /closing-filestream-and-streamwriter-and.html

Andere Tipps

Dies ist wahrscheinlich nicht die Antwort, die Sie suchen, aber das ist genau, warum Sie Mocks verwenden sollten, und nicht tatsächlich Dateien erstellen.

Hier ist eine gebrauchsfertige Lösung, die das Dateisystem für spöttisch: http: //bugsquash.blogspot.com/2008/03/injectable-file-adapters.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top