为什么python nose unittest拆卸夹具失败了

时间:2010-10-12 14:43:32

标签: python unit-testing nose fixture

我正在使用nose测试框架。运行测试模块时,其中定义的拆卸功能失败。引发的错误表明夹具被另一个过程锁定。这是我的测试模块 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)文件,用作fixture。实际上,由于它被其他进程锁定,因此被拆卸无法删除的db文件。根据我的理解,在完成所有测试功能运行后,拆机将始终运行。那为什么会这样呢?为什么那些测试函数仍然可以锁定db文件?这是一个sqlite3问题,还是我的测试代码中有问题?

2 个答案:

答案 0 :(得分:0)

您可以尝试在拆除test_output_dir之前显式关闭拆解中的sqlite连接。

答案 1 :(得分:0)

我相信我在c#单元测试中遇到了同样的问题。

我在删除数据库文件之前使用调用SqliteConnection.ClearAllPools()来解决它,因此它与连接池有关。

也许python中有一个等效的方法?我真的不知道。