8

私は鼻で発見して実行しているいくつかのPython単体テストを持っています。私は、setUpModule()、tearDownModule()、およびテスト モジュールのインポートのいくつかの奇妙なシーケンスを観察しました。私はこの(例)ディレクトリ構造を持っています:

test1.py
test_dir/test2.py

test1.py と test2.py はどちらも次のようになります。

import sys
import unittest

def flushwrite(text):
    sys.stdout.write(text + '\n')
    sys.stdout.flush()

flushwrite("import %s" % __name__)

def setUpModule():
    flushwrite("setUp %s" % __name__)

def tearDownModule():
    flushwrite("tearDown %s" % __name__)

class Test(unittest.TestCase):
    def test1(self):
        flushwrite("running %s.test1" % __name__)

を実行するnosetests -s test1.py test_dir/test2.pyと、次のシーケンスが表示されます。

  1. 輸入テスト1
  2. 輸入テスト2
  3. セットアップテスト1
  4. test1.test1 の実行
  5. ティアダウンテスト1
  6. セットアップテスト2
  7. test2.test1 の実行
  8. ティアダウンテスト2

これは私が期待/望むものです。nosetests -s test1.py test_dir(テスト検出を使用して test2.py を見つける) を実行すると、次のシーケンスが表示されます。

  1. 輸入テスト1
  2. 輸入テスト2
  3. セットアップテスト1
  4. test1.test1 の実行
  5. セットアップテスト2
  6. test2.test1 の実行
  7. ティアダウンテスト2
  8. ティアダウンテスト1

test1 の tearDown は、test2 のテストの後に実行されることに注意してください。これは、test2 の実行時にシステムがクリーンな状態ではないことを意味します! 明らかに、これは大規模なディレクトリ ツリーから検出された何千ものテストの運用環境では問題になる可能性があります。

調子はどう?私は何か誤解していますか?各テスト モジュールの後に、tearDownModule が確実に実行されるようにする方法はありますか?

4

1 に答える 1

3

test2.pyファイルは と同じモジュールの下にあるため、両方test1.pysetUpModuleおよびtearDownModuleメソッドがに適用されます。test1.pytest2.py

私はただ使用setUpClasstearDownClass、それらを Test クラス内に配置します。このようにして、setUp と TeaDown が各クラスに個別に関連付けられていることを確認します。

于 2014-03-03T21:11:27.780 に答える