0

私はノーズテストフレームワークを使用しています。テスト モジュールを実行すると、そのモジュールで定義されたティアダウン関数が失敗しました。発生したエラーは、フィクスチャが別のプロセスによってロックされていることを示しています。ここに私のテストモジュール、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) フ​​ァイルがあります。実際には、他のプロセスによってロックされているため、ティアダウンで削除できないのはその db ファイルです。私の理解では、すべてのテスト関数の実行が終了した後、ティアダウンが常に実行されます。では、なぜそれが起こるのですか?これらのテスト関数が db ファイルをロックできるのはなぜですか? それはsqlite3の問題ですか、それとも私のテストコードに問題がありますか?

4

2 に答える 2

0

を削除する前に、ティアダウンで sqlite 接続を明示的に閉じてみることができますtest_output_dir

于 2010-10-12T14:58:10.230 に答える
0

私のC#単体テストでも同じ問題があったと思います。

データベースファイルを削除する前に SqliteConnection.ClearAllPools() を呼び出すことで解決したため、接続プールに関連しています。

多分pythonに同等の方法がありますか?本当にわかりません。

于 2010-10-21T19:26:00.387 に答える