2016-07-28 6 views
0

löschen Wenn alle Tests ausführen Auswahl, und es gibt Logik innerhalb [TestInitialize] Methode, eine Datei zu löschen, alles nach dem ersten abgeschlossenen Test die folgende Fehlermeldung:C# MSTest - Datei in TestInitialize

The process cannot access the file 'C:\root\var\MonRequestGeneratorTests.sqlite' because it is being used by another process..

hier ist die Initialize-Methode:

[TestInitialize] 
public override void Initialize() 
{ 
    string sqliteFilePath = "myPath"; 
    if (File.Exists(sqliteFilePath)) { 
     File.Delete(sqliteFilePath); 
    } 
} 

Wie kann ich um diese mit Tests bekommen? Dies ist eine SQLite-Datenbank und die Möglichkeit, sie zu löschen, ist das Löschen einer Datei. Ich brauche diese Datei vor jedem Testlauf zu löschen.

Antwort

0

Das bedeutet, dass die sqlite-Datei entweder in einem anderen Programm geöffnet ist (wie in einer SQL-Verwaltungssoftware) oder dass Sie Ihre Streams nach dem Zugriff während der Tests nicht gelöscht haben.

Wenn Sie eine Datei mit einem FileStream oder etwas ähnlichem öffnen, stellen Sie sicher, dass Sie dies in einer 'using'-Klausel tun, damit sie später entsorgt wird.

Eine Sache, die ich empfehlen würde, ist, anstatt die Daten während der Initialisierung zu löschen, lösche sie während des Teardown. Nehmen Sie an, dass Ihr Arbeitsbereich sauber ist, und stellen Sie sicher, dass Sie ihn sauber lassen, wenn Sie fertig sind. Wenn ein Test nicht über seinen FileStream verfügt, schlägt der fehlerhafte Test fehl und nicht der Test danach.

+0

Problem ist, dass Entity Framework dies verwendet, und der DB-Kontext ist in einem using-Block. – blgrnboy

+0

Dies scheint ein weiteres Problem mit Entity Framework zu sein: http://stackoverflow.com/questions/16979635/dbcontext-doesn-release-sqlite-database – Gilthans

Verwandte Themen