почему Python нос прибор для испытаний на разрыв устройства не удалось - PullRequest
0 голосов
/ 12 октября 2010

Я использую перенос тестовый фреймворк. При запуске тестового модуля определенная в нем функция разрыва не удалась. возникшая ошибка говорит о том, что прибор заблокирован другим процессом. вот мой тестовый модуль, test_my_module.py :

... ...    
def teardown():
    if os.path.exists(test_output_dir):
        shutil.rmtree(test_output_dir)
... ...

@with_setup(init_test_db, destroy_test_db)
def test_foo1():
    eq_(foo1(),1)

@with_setup(init_test_db, destroy_test_db)
def test_foo2():
    eq_(foo2(),2)
... ...

В файле test_output_dir есть файл db (sqlite3), который использовался в качестве устройства. На самом деле это тот файл БД, который не может быть удален путем разрыва, потому что он заблокирован другим процессом. Насколько я понимаю, демонтаж всегда будет запускаться после завершения всех тестовых функций. Так почему это происходит? почему эти тестовые функции все еще могут заблокировать файл БД? Это проблема sqlite3 или что-то не так в моем тестовом коде?

Ответы [ 2 ]

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

Я думаю, что у меня была такая же проблема в моих модульных тестах c #.

Я решил это с помощью вызова SqliteConnection.ClearAllPools () перед удалением файла базы данных, поэтому он связан с пулом соединений

Может быть, в python есть эквивалентный метод?Я действительно не знаю.

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

Вы можете попробовать явно закрыть соединение sqlite в разборке перед удалением test_output_dir.

...