2016-07-28 4 views
0

При выборе для выполнения всех тестов, и есть логика в [TestInitialize] метод для удаления файла, что-нибудь после первого завершенного теста получает следующее сообщение об ошибке:C# MSTest - Удалить файл в TestInitialize

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

Вот метод Initialize:

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

Как обойти это с тестами? Это база данных SQLite, и средством ее удаления является удаление файла. Мне нужно, чтобы файл был удален до запуска каждого теста.

ответ

0

Это означает, что файл sqlite либо открыт в какой-либо другой программе (например, какое-то программное обеспечение для управления SQL), либо что вы не располагали потокам после доступа к нему во время тестов.

Всякий раз, когда вы открываете файл с помощью FileStream или что-то подобное, убедитесь, что вы делаете это в предложении 'using', чтобы оно было удалено позже.

Одна вещь, которую я бы рекомендовал, вместо удаления данных во время инициализации удаляет ее во время срыва. Предположим, что ваше рабочее пространство чистое, и убедитесь, что вы оставите его чистым, когда закончите. Таким образом, если какой-либо тест не удалил его FileStream, оскорбительный тест завершится неудачей, а после него не будет проходить тестовый запуск.

+0

Проблема заключается в том, что Entity Framework использует это, а контекст DB находится в используемом блоке. – blgrnboy

+0

Это, похоже, еще одна проблема с Entity Framework: http://stackoverflow.com/questions/16979635/dbcontext-doesnt-release-sqlite-database – Gilthans