VS MSTest runner блокирует System.Data.SQLite.dll при запуске в тестах памяти

Я использую Fluent NHibernate для запуска тестов базы данных в памяти (MS Test) с использованием SQLite 1.0.66.0:[124 providedAnd then using this as example:

[TestClass]
public class MessagesControllerTests : InMemoryDatabaseTest
{
    [TestMethod]
    public void SQLite_should_have_all_handles_released()
    {
        using (var session = this.CreateSession())
        {
            // Don't even need to do anything.
        }
    }
}

После выполнения этого теста я пытаюсь Очистить все решение. Результаты следующие:

  • При запуске этого теста (CTRL + R, CTRL + T) очистка может быть успешной, как и ожидалось.
  • При отладке этого теста в (CTRL + R, T) очистка не работает с ошибкой: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (3607,9): предупреждение MSB3061: невозможно удалить файл «PathToProject \ bin \ Debug \ System.Data.SQLite.DLL ". Доступ к пути 'PathToProject \ bin \ Debug \ System.Data.SQLite.DLL' запрещен.

Моя первая мысль была в порядке, удалите DLL. Когда я пытаюсь это сделать, мне предлагается, что QTAgent32.exe в настоящее время использует DLL. Я использовал Process Explorer, чтобы убедиться в этом. По какой-то причине средство запуска тестов ms сохраняет дескриптор библиотеки DLL. Я пробовал модифицировать метод Очистка с некоторыми предложениями из другого вопроса , но он все равно не работал:

[TestCleanup]
public void Cleanup()
{
    new SchemaExport(this.configuration).Drop(false, true);
    sessionFactory.Close();
    sessionFactory.Dispose();
    SQLiteConnection.ClearAllPools();
    GC.Collect();
}

Мне удалось воспроизвести это на 3 разных машинах . Мы будем очень признательны за любой известный метод решения этой проблемы.

Обновление : я устранил некоторые языковые затруднения. Фактическая конфигурация решения может быть в Debug / Relase. Однако выполнение тестов по сравнению с отладкой тестов вызывает разницу в сообщениях об ошибках.

7
задан Community 23 May 2017 в 10:34
поделиться