我有一个像这样的程序
class A():
def __init__(self):
self.foo = x
if __name__ == '__main__':
x = 96
a=A()
print(a.foo)
从外壳程序“ python foo.py”运行时,它会打印出96
我也有test_foo.py
import foo
import unittest
class TestFoo(unittest.TestCase):
def test1(self):
x=37
a=foo.A()
self.assertEqual(a.foo, 37)
if __name__ == '__main__':
unittest.main()
从外壳运行此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 = x
NameError: global name 'x' is not defined
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
所以我的问题是,是否可以从test_foo.py测试foo.py,设置x并查看它是否在类A中使用。f无需更改foo.py程序
显然,这是真实程序的简化版本
我在python 3.6和2.7上得到了相同的结果
我尝试使用global
的各种组合,但没有找到使用此方法的方法
答案 0 :(得分:2)
您的x
变量在if
块中定义,该变量检查foo.py
是否作为主程序运行,因此foo.py
由{{1}导入时},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
的{{1}}的值,则应使用x
而不是foo
,因为{{ 1}}否则将是foo.x=37
的局部变量。
答案 1 :(得分:1)
您需要将其更改为:
class Window(QMainWindow):
def __init__(self, parent=None):
#This initializes the main window or form
super(Window,self).__init__(parent=parent)
self.setGeometry(1,31,900,900)
self.setWindowTitle("Pre-Alignment system")
def run():
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
GUI = Window()
view = Display_Pixels(GUI)
#view = MyView(GUI)
GUI.show()
sys.exit(app.exec_())
run()
并在测试中:
class A():
def __init__(self,x):
self.foo = x
答案 2 :(得分:0)
您可以在此处访问全局范围内的变量x
:
self.foo = x
直接运行脚本时,__name__
是' main ',则需要设置全局变量x
并构造A()
。
导入foo
下的if
模块代码时,不会执行。全局范围内或外部范围内都没有变量x
。