以下程序:
import unittest
class my_class(unittest.TestCase):
def setUp(self):
print "In Setup"
self.x=100
self.y=200
def test_case1(self):
print "-------------"
print "test case1"
print self.x
print "-------------"
def test_case2(self):
print "-------------"
print "test case2"
print self.y
print "-------------"
def tearDown(self):
print "In Tear Down"
print " "
print " "
if __name__ == "__main__":
unittest.main()
给出输出:
>>> ================================ RESTART ================================
>>>
In Setup
-------------
test case1
100
-------------
In Tear Down
.In Setup
-------------
test case2
200
-------------
In Tear Down
.
----------------------------------------------------------------------
Ran 2 tests in 0.113s
OK
>>>
>>>
问题:
的含义是什么:if __name__ == "__main__": unittest.main()
?
为什么我们为name
和main
添加了前缀和后缀的双下划线?
my_class
的对象在哪里创建?
答案 0 :(得分:2)
if __name__ == "__main__":
位允许您的代码作为模块导入而不调用unittest.main()
代码 - 只有在调用此代码作为程序的主入口点时才会运行(即如果您的程序位于python program.py
),则称其为program.py
。
双下划线的前缀和后缀表示:
__double_leading_and_trailing_underscore__
:生活在用户控制的命名空间中的“神奇”对象或属性。例如。__init__
,__import__
或__file__
。不要发明这样的名字;只能按照文件记录使用它们。
来自PEP 8 Style Guide - 这是一个非常有用的阅读和内化资源。
最后,您的my_class
类将在运行时在unittest框架中实例化,因为它继承自unittest.TestCase
。