2015-02-10 84 views
0

以下程序:单元测试在Python

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

问题:

  1. 什么意思:if __name__ == "__main__": unittest.main()

  2. 为什么我们有双下划线前缀为namemain

  3. 将在何处创建my_class的对象?

+0

看到这个问题http://stackoverflow.com/questions/419163/what-does-if-name-main-do – HavelTheGreat 2015-02-10 18:08:34

+0

1.一次提出一个问题。 2.前导双尾下划线用于指示*“魔术”对象或属于用户控制的命名空间“*,[PEP-0008](https://www.python.org/dev/peps/ PEP-0008 /#描述命名的样式)。这可以防止它们与用户的名字发生冲突(例如,您可以调用函数'main'或变量'name')。见例如http://stackoverflow.com/q/19216895/3001761 3.你是什么意思*“where”* ?! – jonrsharpe 2015-02-10 18:12:41

回答

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

+0

谢谢@ lukas-graf,仍在学习。 :) – jimjkelly 2015-02-10 18:31:06