def main(): print 'hello'
單元測試的重要性就很少說了,可惡的是python中有太多的單元測試框架和工具,什麼unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等這些,先不說如何寫單元測試,html
光是怎麼運行單元測試就有N多種方法,再由於它是測試而非功能,是不少人沒興趣觸及的東西。可是做爲一個優秀的程序員,不只要寫好功能代碼,寫好測試代碼同樣的彰顯你的實力。如此多的框架和工具,很容易讓人困惑,困惑的緣由是由於並無理解它的java
基本原理,若是一些基本的概念都不清楚,怎麼可以寫出思路清晰的測試代碼?python
今天的主題就是unittest,做爲標準python中的一個模塊,是其它框架和工具的基礎,參考資料是它的官方文檔:http://docs.python.org/2.7/library/unittest.html和源代碼,文檔已經寫的很是好了,我在這裏記錄的主要是它的一些重要概念、關鍵點以及程序員
可能會碰到的一些坑,目的在於對unittest加深理解,而不是停留在泛泛的表面層上。框架
unittest是一個python版本的junit,junit是java中的單元測試框架,對java的單元測試,有一句話很貼切:Keep the bar green,相信使用eclipse寫過java單元測試的都心照不宣。unittest實現了不少junit中的概念,好比咱們很是熟悉的test case, testeclipse
suite等,總之,原理都是相通的,只是用不一樣的語言表達出來。工具
在文檔的開篇就介紹了unittest中的4個重要的概念:test fixture, test case, test suite, test runner,我以爲只有理解了這幾個概念,才能真正的理解單元測試的基本原理,下面就主要圍繞這幾個概念來展開這篇文章。單元測試
首先經過查看unittest的源碼,來看一下這幾個概念,以及他們之間的關係,他們是如何在一塊兒工做的,其靜態類圖以下:測試