1

我正在尝试用鼻子编写测试,但我需要一些关于模块和函数设置逻辑的帮助。

def setup_func():
    q_object = u'item'
    retry_in = 20

@with_setup(setup_func)
def test_set():
    assert q_object == u'item'

当我运行鼻子测试时,我收到以下错误:

NameError: global name 'q_object' is not defined

那么如何在我的测试函数中访问 q_object 呢?以及如何在特定测试类中从 setup_module() 访问对象?

我想出了 setup_module。

setup_module(module):
    module.item = u'item'

比在模块中我简单地使用创建的对象 - 项目。

4

2 回答 2

2

这段代码对我有用:

它融合了两全其美。用于保存范围和比默认 unittest2 框架更清晰的测试的类。

class TestSomething(object):

  def setup(self):
    self.q_object = u'item'

  def test_set(self):
    eq_(self.q_object, u'item')
于 2013-12-23T18:35:45.410 回答
1

实际上,您正在尝试在测试中访问全局变量。因此,您的代码应该看起来像这样。

q_object = None

def setup_func():
    global q_object
    q_object = u'item'

@with_setup(setup_func)
def test_set():
    global q_object
    assert q_object == u'item'

但是使用全局变量——真的不是一个好主意。尝试找到另一种可以避免它们的方法。

我认为测试课程非常适合您

class ExampleTest(unittest.TestCase):
    def setUp(self):
        self.q_object = u'item'

    def test_a(self):
        assert self.q_object == u'item'

它仍然不完美(相同的全局变量解决方案),但至少包含在类中。

于 2012-12-19T12:35:02.067 回答