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 回答