2

我是 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

我做错了什么,还是没有办法做我想做的事?在我看来,导入一个变量会复制它的值而不是引用它,但也许还有其他方法?

谢谢

4

1 回答 1

2

当您from . import glob在测试文件的顶部执行此操作时,您将获得对glob命名空间中值的引用。这发生在您调用之前setup()。当您调用setup()的值glob在命名空间中更新__init__.py但不是test_mymod.py. 不要直接导入glob,而是像package.glob. 或者,glob在包导入时设置为正确的值;正是由于这个原因,拥有人们可以导入的统一全局变量被认为是不好的做法。

于 2013-05-13T14:39:50.173 回答