鼻子里的setup_module和setup_func

时间:2012-12-19 11:49:12

标签: python unit-testing nose

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

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

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

当我运行nosetests时,我得到以下错误:

NameError: global name 'q_object' is not defined

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

我想出了setup_module。

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

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

2 个答案:

答案 0 :(得分:2)

这段代码对我有用:

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

class TestSomething(object):

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

  def test_set(self):
    eq_(self.q_object, u'item')

答案 1 :(得分: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'

它仍然不完美(同样的全球变量解决方案),但至少包含在课堂内。