为了账号安全,请及时绑定邮箱和手机立即绑定

如何从单元测试测试文件范围内的变量

如何从单元测试测试文件范围内的变量

慕容森 2021-11-09 13:40:01
我有一个这样的程序class A():    def __init__(self):        self.foo = xif __name__ == '__main__':    x = 96    a=A()    print(a.foo)当它从 shell “python foo.py” 运行时,它会打印出 96我也有 test_foo.pyimport fooimport unittestclass TestFoo(unittest.TestCase):    def test1(self):        x=37        a=foo.A()        self.assertEqual(a.foo, 37)if __name__ == '__main__':    unittest.main()当我从 shell 运行这个 test_foo.py 时,我得到$ python test_foo.py E======================================================================ERROR: test1 (__main__.TestFoo)----------------------------------------------------------------------Traceback (most recent call last):  File "test_foo.py", line 8, in test1    a=foo.A()  File "/home/zzz/foo.py", line 3, in __init__    self.foo = xNameError: global name 'x' is not defined----------------------------------------------------------------------Ran 1 test in 0.000sFAILED (errors=1)所以我的问题是,是否可以从 test_foo.py 测试 foo.py,设置 x 并看到它在类 A 中使用。 f 而不改变 foo.py 程序显然,这是一个真实程序的简化版本我用 python 3.6 和 2.7 得到相同的结果我曾尝试使用 的各种组合,global但没有找到使用它的方法
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

您可以x在此处访问全局范围内的变量:

        self.foo = x

当您直接运行脚本时__name__是' main ',而不是设置全局变量x而不是construct A()。当您导入foo模块代码时,if不执行。x全局作用域和任何外部作用域中都没有变量。


查看完整回答
反对 回复 2021-11-09
?
四季花海

TA贡献1811条经验 获得超5个赞

您的x变量是在if检查是否foo.py作为主程序运行的块内定义的,因此何时foo.py由test_foo.py,导入,x将不会被定义,因此会出现错误。


您应该x在if块外定义:


x = 96


class A():

    def __init__(self):

        self.foo = x


if __name__ == '__main__':

    a=A()

    print(a.foo)

而在test_foo.py,如果你想覆盖的价值x的foo,你应该做foo.x=37的,而不是x=37因为x否则将是一个局部变量test1。


查看完整回答
反对 回复 2021-11-09
?
慕的地10843

TA贡献1785条经验 获得超8个赞

您需要将其更改为:


class A():

    def __init__(self,x):

        self.foo = x

并在测试中:


class TestFoo(unittest.TestCase):

    def test1(self):

        x=37

        a=foo.A(x)

        self.assertEqual(a.foo, 37)


查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 145 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信