Это проблема блокировки файла из-за того, что я копировал файл БД для каждого теста MSTest? (используя аннотацию DeploymentItem) - PullRequest
1 голос
/ 13 ноября 2009

ФОН :

  • Я запускаю модульные тесты в VS2008, используя MSTest.
  • Мой проект имеет базу данных SqlLite.
  • Я обнаружил, что мне нужно было сделать так, чтобы файл базы данных по умолчанию копировался в область MSTest, чтобы тест мог его найти. Я использую следующую аннотацию о тестовом коде, чтобы организовать это: [DeploymentItem ( "database.db3")]

ВЫПУСКА

  • Когда я запускаю «все тесты» одновременно через VS2008, я получаю нижеупомянутую ошибку в одном из тестов. Когда я запускаю этот тест один, он проходит нормально.
  • Я получаю ошибку: «System.Data.SQLite.SQLiteException: Файл базы данных заблокирован База данных заблокирована »
  • Опять же, когда я запускаю тест, который решает только эту проблему, он работает нормально и проходит

ВОПРОС

Какие-нибудь идеи / предложения относительно того, как решить эту проблему? Это связано с тем, что я вручную копирую файл базы данных для каждого теста (т. Е. У каждого теста есть одна из вышеупомянутых аннотаций)

Пример полного теста:

/// <summary>
///A test for process
///</summary>
[TestMethod()]
[DeploymentItem("database.db3")]
public void processTest()
{
    Coordinator target = new Coordinator();
    target.MyConfig.clear_database();

    target.process();
}

Спасибо

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Похоже, первый запущенный модульный тест оставляет файл БД открытым. Обязательно закройте файл БД.

Попробуйте использовать метод [TestInitialize ()] в своем тестовом приспособлении для копирования / создания, а затем откройте файл БД, а для закрытия используйте метод [TestCleanup ()] и затем удалите файл БД.

0 голосов
/ 21 октября 2010

Вызвать статический метод SQLiteConnection.ClearAllPools () или SQLiteConnection.ClearPool () непосредственно перед удалением файла базы данных.

...