2015-02-10 137 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