我是Python新手,我尝试将鼻子作为一个单元测试框架。 我遇到了一个我没想到的行为,但也许这是正常的,因此我的问题。
我有两个(非常基本的)文件:
。__ INIT __ PY:
#!/usr/bin/env python
glob = 0
def setup():
global glob
glob = 42
print "Package setup"
test_mymod.py:
#!/usr/bin/env python
from unittest import TestCase
from . import glob
print "test_mymod.py"
class testMyMod(TestCase):
def setUp(self):
print glob
def test_random(self):
pass
def tearDown(self):
pass
运行nosetest -s
会给我以下输出:
test_mymod.py
Package setup
0
由于在测试的setUp()函数之前调用了包的setup()函数,我希望看到print glob
输出42
。
我做错了什么,或者没有办法做我想做的事情? 在我看来,导入变量复制其值而不是引用它,但也许还有办法吗?
谢谢
答案 0 :(得分:2)
当您在测试文件的顶部执行from . import glob
时,您会在命名空间中获得glob
的值的引用。这在您致电setup()
之前发生。当您致电setup()
时,glob
名称空间中的__init__.py
值已更新,但test_mymod.py
未更新glob
。不是直接导入package.glob
,而是像glob
一样引用它。或者,在包导入时将{{1}}设置为正确的值;由于这个原因,人们可以导入的全局变量被认为是不好的做法。