国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

說說Python中的單元測試

chengjianhua / 1279人閱讀

摘要:必然的,他們會拋棄標準庫中的,使用或者發明自己心儀的單元測試框架。究其原因,一些人會說時間寫代碼都不夠,哪還有空寫單元測試。最后我的個人觀點,單元測試其實還有一個非常重要的作用,就是替代函數文檔注釋。希望從今天起,你的代碼也都有單元測試。

單元測試是每種編程語言必學的課題,是保護開發者的強力護盾,每個程序員都在時間允許的情況下盡可能多的寫單元測試,今天我們不討論其必要性,只拋磚引玉聊一聊Python中的單元測試,本文僅代表個人看法。

標準庫中難以忍受的 unittest

很多時候我們總是認為標準庫里的帶的總是精挑細選的,如果不經過仔細打磨怎么可能入選為一等公民?但我要告訴你,Python標準庫里的單元測試框架真不是最好的,隨著你對Python的熟悉你甚至會討厭這個unittest。

Python一直崇尚簡單,優雅,高效地完成事情,當你寫完一個函數需要測試一下時,使用標準庫的unittest你需要做這些事情:

新建單元測試腳本

導入單元測試依賴

繼承單元測試類

實現單元測試方法

具體的實例代碼如下:

import unittest

class IntegerArithmeticTestCase(unittest.TestCase):
    def testAdd(self):  # test method names begin with "test"
        self.assertEqual((1 + 2), 3)
        self.assertEqual(0 + 1, 1)

if __name__ == "__main__":
    unittest.main()

看上去還行,不是很難。但是漸漸地你會吐槽:

為啥我要新建一個文件來寫測試?

為啥我要繼承一個類來寫測試?

為啥我要用unittest的Assertion來做斷言?

為啥unitunit的命名規則跟最佳實踐不一樣(mixedCase vs lower_case)?

要回答以上問題,答案只有一個:歷史原因。

很久很久以前,Python從Java借鑒了單元測試框架,包括命名規則和實現方式,一直沿用至今。不得不說這個框架沒啥毛病,該有的功能的都有,想做的事都可以做,但是用起來總是沒有爽的感覺。

但是為啥偉大的社區力量為啥不把這個框架改的爽一點呢?沒辦法,我估計是為了世界和平,你要知道Python這個龐然大物能健康地活著,后面有無數的類庫和方法在支撐,而這些類庫和方法都被單元測試保護著,如果修改了單元測試框架導致兼容性問題,就成了千古罪人。

見識簡潔的單元測試 pytest

Python中很多大牛其實都有嚴重的強迫癥,追求簡潔和優雅的代碼。必然的,他們會拋棄標準庫中的unittest,使用或者發明自己心儀的單元測試框架。

正如其名,pytest是一個無數人推薦并在使用的Python單元測試框架,它使用起來非常簡單,只要你的方法名以 test 開頭就可以,你可以和需要測試的方法放在一起,亦或是新建一個文件來專門整理單元測試,都可以。

def your_func():
  pass

def test_your_func():
  assert result

這樣的設計,就讓你寫單元測試成了順手拈來的事,假如你寫完了一個方法,想看看是否工作,在旁邊直接寫上一個test 開頭的方法,稍微準備一下數據就可以驗證這個方法好不好用,豈不妙哉?

The idioms that pytest first introduced brought a change in the Python community because they made it possible for test suites to be written in a very compact style, or at least far more compact than was ever possible before. Pytest basically introduced the concept that Python tests should be plain Python functions instead of forcing developers to include their tests inside large test classes.

pytest 的發明讓大家意識到單元測試原來可以這么輕松和隨意,完全沒有必要去繼承一個所謂的測試類或者按照復雜的規則才能開始書寫測試代碼,這也是我選擇和推薦它的理由。

當然,如果原來你的單元測試時unittest寫的話,pytest其實也是有可能兼容的的。

pytest 能夠識別 unittest.TestCase 子類中的測試方法,如果文件名符合 test_*.py 或者 *_test.py 這樣的規則。

并且大多數 unittest 的功能都是被支持的,例如:

@unittest.skip 裝飾器;

setUp/tearDown;

setUpClass/tearDownClass();

我覺得,pytest有以下優點:

上手和使用足夠簡單

當case失敗時信息足夠豐富和直觀,比如最后導致失敗的變量值會打印出來

更豐富的運行參數

可以使用 assert 而不是 self.assert*

被廣大IDE支持,社區資源豐富,用戶群體大

讓單元測試和IDE無縫集成

畢竟我們大多數人都不是神,不能用記事本寫代碼,IDE才是我們正確搬磚的方式。Python的首選IDE毋庸置疑就是 JetBrain 公司出品的 PyCharm。

在PyCharm中只要你將默認的單元測試驅動改成pytest,就可以在任意test開頭的方法上通過右鍵菜單運行或者調試這個測試案例,非常方便。

如果你要運行當前文件的所有測試,只要從非test方法的其他區域點擊右鍵即可?;蛘咝薷娜我庖呀涍\行過的Configuration,添加你想要的參數,比如最多運行掛3個case就終止測試等等。

閑話和總結

單元測試的重要性大家都知道,大名鼎鼎的TDD應該都聽過,但是真正在實踐的少之又少。

究其原因,一些人會說時間寫代碼都不夠,哪還有空寫單元測試。還有一些人就是嫌麻煩,在絕大多數編程語言里單元測試都是需要多帶帶建立工程和目錄的,寫單元測試需要很多基礎工作要做,本以為順手就可以寫的單元測試,實際上需要費九牛二虎之力還是在搭架子,太沮喪了。

Python的動態特性和靈活性讓它有可能讓單元測試超級簡單,有可能你認為單元測試還是不要和業務代碼混合在一起的好,那就多辛苦一點新建一個文件導入要測試的方法,寫一個 test 開頭的方法即可,不算太難,不要找推辭的理由。

最后我的個人觀點,單元測試其實還有一個非常重要的作用,就是替代函數文檔注釋。比如你寫了一個函數,使用起來可能有那么一點復雜,你可以給它寫一份清晰的注釋文檔,但是千言萬語不如給我來個例子,單元測試可以充當例子的角色,什么樣的輸入,輸出結果如何,一目了然。

希望從今天起,你的代碼也都有單元測試。

關于作者:

Toby Qin, Python 技術愛好者,目前從事測試開發相關工作,轉載請注明原文出處。

歡迎關注我的博客 https://betacat.online,你可以到我的公眾號中去當吃瓜群眾。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41714.html

相關文章

  • 一些 PyCharm 的使用和設置建議

    摘要:顯示工具欄默認并不顯示工具欄,在大多數工具欄都放了最常用的操作,你可以通過主菜單顯示菜單欄來顯示工具欄。工具欄顯示出來后你還可以通過右鍵定制上面的按鈕,我會把一些跟相關的操作放到上面,比如,,默認它只加了和。 PyCharm是我強烈推薦的Python IDE,如果你有EDU的郵箱可以直接申請專業版授權,或者就使用社區版,功能上并沒有太多縮減,日常開發也完全夠用。 如果是首次安裝PyCh...

    Drinkey 評論0 收藏0
  • 通過demo學習OpenStack開發所需的基礎知識 -- 單元測試

    摘要:本文將進入單元測試的部分,這也是基礎知識中最后一個大塊。本文將重點講述和中的單元測試的生態環境。另外,在中指定要運行的單元測試用例的完整語法是。中使用模塊管理單元測試用例。每個項目的單元測試代碼結構可 本文將進入單元測試的部分,這也是基礎知識中最后一個大塊。本文將重點講述Python和OpenStack中的單元測試的生態環境。 單元測試的重要性 github上有個人畫了一些不同語言的學...

    douzifly 評論0 收藏0
  • 精讀《持續集成 vs 持續交付 vs 持續部署》

    摘要:持續交付持續交付是持續集成的擴展,可以保證穩定的發布產品新特性。持續部署持續部署是持續交付的下一步。持續部署可以加速用戶反饋新特性,避免發布日帶來的壓力。單元測試范圍非常小,驗證每個獨立方法級別的操作。 一、摘要 相信大家以前應該接觸過持續集成(Continuous integration)持續交付(continuous delivery)持續發布(continuous deploym...

    MangoGoing 評論0 收藏0
  • python學習筆記- 單元測試,UnitTest

    摘要:所謂的單元測試,就是對一個模塊,一個函數,或則是一個類進行正確性檢測的一類測試工作。當然,單元測試也會讓代碼量大大增加。編寫單元測試代碼需要引入的包。再所有單元測試開始前運行函數在所有單元測試運行后運行。 所謂的單元測試,就是對一個模塊,一個函數,或則是一個類進行正確性檢測的一類測試工作。 以測試驅動的開發方式叫做測試驅動開發(Test Drived Development). 這種開...

    k00baa 評論0 收藏0
  • 2021年軟件測試工具總結——單元測試工具

    摘要:單元測試框架作為的標準庫,是其他單元測試框架的基礎。可以和和配合使用編寫單元測試。官網地址單元測試覆蓋率工具單元測試中還需要用到代碼覆蓋率工具。代碼覆蓋率統計工具用來發現沒有被測試覆蓋的代碼,完善單元測試的覆蓋率。 在應用程序中,單元是具有一個或多個輸入和單個輸出的軟件中最小可測試部分。單元...

    qingshanli1988 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<