1

私はいくつかのテストを行っています。テスト関数の多くには共通の設定があるため、 の@with_setupデコレータを使用することにしましnose.toolsた。問題を次のように単純化しました。

from nose.tools import with_setup

class TestFooClass(unittest.TestCase):
   def setup_foo_value(self):
      self.foo = 'foobar'

   @with_setup(setup_foo_value)
   def test_something(self):
      print self.foo

次のエラーが表示されます。

$ python manage.py test tests/test_baz.py

E
======================================================================
ERROR: test_something (project.tests.test_baz.TestFooClass)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/user/Coding/project-backend/project/../project/tests/test_baz.py", line 17, in test_something
    print self.foo
AttributeError: 'TestFooClass' object has no attribute 'foo'

----------------------------------------------------------------------

setup_foo_valueまったく実行されていないようです。どんな助けでも本当に感謝します!

4

3 に答える 3

14

ドキュメントによると:

  • テストの作成: 「サブクラスではメソッド ジェネレータサポートされていないことに注意してください」unittest.TestCase
  • テスト ツール: 「テスト関数に対してのみwith_setup有用であり、テスト メソッドや TestCase サブクラス内では有用ではありません」

したがって、テスト メソッドを関数に移動するか、setUpメソッドをクラスに追加できます。

于 2012-10-18T23:15:27.110 に答える
2

この変更を試してください。それは私のために働いた。

from nose.tools import with_setup

def setup_foo_value(self):
    self.foo = 'foobar'

@with_setup(setup_foo_value)
def test_something(self):
    print self.foo
于 2016-10-22T01:42:09.070 に答える
0

最初のアイデアは、次の方法で実装できます。

import wrapt

@wrapt.decorator
def setup_foo_value(wrapped, instance, args, kwargs):
   instance.foo = 'foobar'
   return wrapped(*args, **kwargs)

class TestFooClass(unittest.TestCase):
   @setup_foo_value
   def test_something(self):
      print self.foo

追加でwrapt Pythonモジュールを使用することが重要です

于 2015-12-18T12:35:14.383 に答える