2010-10-12 120 views
0

我正在使用nose測試框架。運行測試模塊時,其中定義的拆卸功能失敗。提出的錯誤表示燈具被另一個過程鎖定。這裏是我的測試模塊,test_my_module.py爲什麼python鼻子單元測試拆卸夾具失敗

... ...  
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它被用作固定物分貝(sqlite3的)文件。實際上這是因爲被其他進程鎖定而無法被拆卸的db文件。據我瞭解,在所有測試功能完成運行後,拆卸將始終運行。那麼爲什麼會發生?爲什麼這些測試函數仍然可以鎖定db文件?這是一個sqlite3問題,或者在我的測試代碼中有一些錯誤?

+0

你能否提供你的'init_test_db','destroy_test_db'和'fooN'函數發生了什麼更多細節? – 2013-02-18 23:22:25

回答

0

在刪除test_output_dir之前,您可以嘗試在拆卸時明確關閉sqlite連接。

+0

它甚至沒有明確關閉sqlite連接。 – 2010-10-12 15:23:03

0

我相信我在c#單元測試中遇到過同樣的問題。

我通過在刪除數據庫文件之前調用SqliteConnection.ClearAllPools()來解決它,所以它與連接池有關。

也許在Python中有一個等價的方法?我真的不知道。