NUnit [Разрушение] сбои — какой процесс получает доступ к моим файлам?

git show --name-only commitCodeHere
18
задан 9 revs, 2 users 100% 19 December 2008 в 08:00
поделиться

9 ответов

попытка звонить Близко на dbconnection

удостоверяется, что процесс sqllite завершается

, Вы видите, какому процессу заблокировали Ваш файл с Неблокировщиком (свободная) утилита

, которой это может быть 'известная' проблема с SqlLite; подшучивание форума предлагает закрыть соединение и расположить команду, и предполагает, что это будет зафиксировано в будущей версии (так как это поведение не согласовывается с другими поставщиками ADO)

1
ответ дан 30 November 2019 в 09:35
поделиться

Я должен был бы видеть Вашу логику создания имени файла, но возможно, что Вы открываете файл для создания его, но не закрываете его, после того как это создается. Я думаю, используете ли Вы Систему. IO.Path. GetTempFileName () это просто создаст файл и возвратит Вас название файла с закрытым файлом. Если Вы делаете свое собственное случайное поколение имени и используете Файл. Открытый, необходимо будет удостовериться, что это закрывается впоследствии.

На другой ноте, я сердечно рекомендую преследовать стратегию насмешки абстрагировать базу данных вместо того, чтобы читать/писать из фактической базы данных в Ваших модульных тестах. Точка модульных тестов - то, что они должны быть очень быстрыми, и файловый ввод-вывод собирается действительно замедлить их.

0
ответ дан 30 November 2019 в 09:35
поделиться

У Вас есть Антивирусное выполнение? Некоторые продукты AV сканируют файл, когда они видят, что они закрываются. Если программное обеспечение AV все еще будет иметь файл, открытый, когда Вы приедете для удаления его, Вы будете видеть эту проблему. Вы могли повторить удаление после маленькой задержки.

я также видел, что это происходит с поисковыми индексаторами.

0
ответ дан 30 November 2019 в 09:35
поделиться

Первый шаг должен был бы найти, кто держит дескриптор в рассматриваемый файл.

Получают копию Проводник Процесса Выполнение это. Нажмите Ctrl+F и введите имя файла. Это показало бы Вам список процессов, получающих доступ к нему.

0
ответ дан 30 November 2019 в 09:35
поделиться

Действительно ли возможно, что файл находится в процессе того, чтобы быть закрытым (Т.е. SQLLite сразу не выпускает его)?

Вы могли попытаться поместить дб близко в цикл задержки, (возможно, одна секунда между каждой попыткой), и только выдать исключение после некоторых (приблизительно 5) повторения через цикл.

0
ответ дан 30 November 2019 в 09:35
поделиться

Что Вы используете для открытия базы данных? Вы используете коннектор ADO 2.0 от здесь . Если имеют приложение, которые используют его, и я могу сделать несколько соединение с ним (близкий/открытый). Если Вы не используете этот коннектор, Вы могли бы дать попытку. Что Ваш метод Соединяет () возврат?

0
ответ дан 30 November 2019 в 09:35
поделиться

Разъедините выполняется после каждого теста.

Этот атрибут используется в TestFixture для обеспечения единого набора функций, которые выполняются после того, как каждый метод тестирования выполняется.

необходимо попытаться удалить их всех с [1 112] TestFixtureTearDown:

    [TestFixtureTearDown]
    public void finish()
    {
        //Delete all file
    }

, Возможно, один тест использует файл, который Вы пытаетесь удалить в другом тесте. < - [Stewart], Поскольку я заявил в вопросе, это происходит, когда я запускаю только один тест, таким образом, это не возможно.

Обновление Вы не даете достаточно информации о том, что Вы делаете. Вы сделали, пытаются очистить весь Тестовый файл только с 1 тестом в Вашем тестовом файле и попробовать его? [Stewart] Yes. , Если это работает [Stewart] (это не делает) затем случается так, что у Вас есть несколько тестовая задача (они получают доступ друг к другу). Вы должны к [1 113] сократить проблему для нахождения источника . Затем возвратитесь сюда, мы поможем Вам. в настоящий момент это только предполагает, что мы можем дать Вам. [Stewart] я уже сделал эти сокращения проблемы, которую Вы предлагаете, Вы найдете, что они находятся в моем исходном вопросе!

0
ответ дан 30 November 2019 в 09:35
поделиться

Спасибо, что указали на это!

Проблема не связана с SQLite, а скорее к управлению памятью в целом. После запуска теста объекты, указывающие на файлы, больше не имеют области видимости, но они все еще существуют в памяти.

Следовательно, все еще есть ссылки на файлы, и вы не можете их удалить / переместить.

0
ответ дан 30 November 2019 в 09:35
поделиться

Я знаю, что этот ответ более года поздно, но для тех, кто читал в будущем ...

У меня была похожая проблема для вашей - попытка удалить базы данных между тестами между тестами Из-за файла базы данных SQLite осталось открытым. Я проследил проблему в моем коде к объекту SQLITATAREADER, не будучи явным закрытым.

SQLiteDataReader dr = cmd_.ExecuteReader();
while (dr.Read())
{
    // use the DataReader results
}
dr.Close();  //  <-- necessary for database resources to be released
0
ответ дан 30 November 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: