0

私は読んだことがあります。私が見つけることができる最も近いものは、ジェネレーター関数とデコレーター関数の使用がサポートされていないという言及です

class getsize メソッドで:setUp tearDowngetfilesizewith_setup(setUp,tearDown)で .

getsize classまた、ループを使用して のインスタンスを作成し、メソッド を呼び出す個別の生成関数 (同じファイル内) もあります getfilesize

経由でファイルを実行するnosetests;と、 @with_setup は、ノーズがクラスを実行するときにのみ実行されることがわかりました。

ジェネレーター関数を実行すると; アクセスされることはありません。回避策として、setUpandtearDownメソッドの呼び出しを追加します。これは本当に私を悩ませており、答えを突き止めるためにかなりの努力をしました。

[追加] これはコード セクションです。

  class Test_getFileSize:
    import logging
    from nose.tools import with_setup
    log = logging.getLogger("Test getfilesize")
        def setUp(self):
            print " running Setup",self.testsize
            with open(self.mytestfile, "wb") as out:
            out.seek(self.testsize-1)
            out.write('0')
            out.close()
        def tearDown(self):
            import os
            print "Running tearDown"
            os.remove(self.mytestfile)
    @with_setup(setUp,tearDown)
    def test_getFileSize(self):`

[このメソッドの残りと init は続きますが、質問には関係ありません。

4

1 に答える 1

0

他の誰もが言及しているように、テスト関数に @with_setup デコレーターを追加する必要はありません。クラスにセットアップ関数とティアダウン関数を既に追加しており、これらはテストの前後に自動的に実行されます。

鼻のドキュメントから:

with_setup は、テスト メソッドや TestCase サブクラスの内部ではなく、テスト関数に対してのみ有用であることに注意してください。

あなたの場合、TestCase クラス内に with_setup があります。鼻のドキュメントには、これが機能しないことが明示的に記載されています

しかし、あなたはすでにパズルを解いたので、 @with_setup デコレーターを削除するだけで完了です。コードは最終的に次のようになります

class Test_getFileSize:
    def setUp(self):
        print " running Setup",self.testsize
        ...

    def tearDown(self):
       ...
       print "Running tearDown"
       ...

    def test_getFileSize(self):
       ...
于 2013-08-10T08:59:48.403 に答える