成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python如何單元測試-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站專注于興寧企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。興寧網(wǎng)站建設(shè)公司,為興寧等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

這篇文章將為大家詳細(xì)講解有關(guān)Python如何單元測試,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

我們來說說目前幾個和測試有關(guān)的東西(全程 Python 3)。

Mock

Mock是個好東西呀,遇到測試中出現(xiàn)的不可預(yù)知的或者不穩(wěn)定因素,就用 Mock 來代 替。例如查詢數(shù)據(jù)庫(當(dāng)然像目前我們用的MongoDB,由于特別靈活,可以直接在代碼里 把相應(yīng)的collection替換掉),例如異步任務(wù)等。舉個例子:

import logging
from unittest.mock import Mock
logging.basicConfig(level=logging.DEBUG)
#  code
class ASpecificException(Exception):
    pass
def foo():
    pass
def bar():
    try:
        logging.info("enter function <foo> now")
        foo()
    except ASpecificException:
        logging.exception("we caught a specific exception")
#  unittest
def test_foo():
    foo = Mock(side_effect=ASpecificException())  # noqa
    logging.info("enter function <bar> now")
    bar()
    logging.info("everything just be fine")
if __name__ == "__main__":
    test_foo()

運行一下

root@arch tests: python test_demo.py
INFO:root:enter function <bar> now
INFO:root:enter function <foo> now
INFO:root:everything just be fine

一個簡單的測試就這么寫好了。來,跟我念,Mock 大法好呀!

doctest

doctest屬于比較簡單的測試,寫在 docstring 里,這樣既能測試用,又能當(dāng)文檔 示例,是在是好用之極啊。缺點是,如果測試太復(fù)雜,doctest就顯得太臃腫了(例如 如果測試之前要導(dǎo)入一堆東西)。舉個例子:

import logging
logging.basicConfig(level=logging.DEBUG)
def foo():
    """A utility function that returns True
    >>> foo()
    True
    """
    return True
if __name__ == "__main__":
    import doctest
    logging.debug("start of test...")
    doctest.testmod()
    logging.debug("end of test...")

測試結(jié)果

root@arch tests: python test_demo.py
DEBUG:root:start of test...
DEBUG:root:end of test...

unittest

這個文檔確實有點長,我感覺還是仔細(xì)去讀一下文檔比較好。

import unittest
class TestStringMethods(unittest.TestCase):
    def setUp(self):
        self.alist = []
    def tearDown(self):
        print(self.alist)
    def test_list(self):
        for i in range(5):
            self.alist.append(i)
if __name__ == '__main__':
    unittest.main()

輸出結(jié)果

root@arch tests: python test_demo.py
[0, 1, 2, 3, 4]
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

unittest框架配合上Mock,單元測試基本無憂啦。

pytest

上面的單元測試跑起來比較麻煩,當(dāng)然也可以寫一個腳本遍歷所有的單元測試文件,然 后執(zhí)行。不過 pytest 對unittest有比較好的支持。

pytest默認(rèn)支持的是 函數(shù) 風(fēng)格的測試,但是我們可以不用這一塊嘛(而且很多時候 還是很有用的)。走進(jìn)項目根目錄,輸入 pytest 就可以啦。它會自動發(fā)現(xiàn) test_ 開頭的文件,然后執(zhí)行其中 test_ 開頭的函數(shù)和 unittest 的 test_ 開頭的 方法。

root@arch tests: pytest
============================================= test session starts ==============================================
platform linux -- Python 3.5.2, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /root/tests, inifile:
collected 1 items
test_afunc.py .
====================================1 passed in 0.03 seconds =======================================================
root@arch tests:

總結(jié)

編譯器沒給python做檢查,就只有靠我們手寫測試了 :(

另外其實 pytest 和 unittest 都有很多強大的特性,例如 fixture,例如 skip 掉某一部分測試。

關(guān)于Python如何單元測試就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當(dāng)前文章:Python如何單元測試-創(chuàng)新互聯(lián)
分享地址:http://jinyejixie.com/article34/jsjpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站網(wǎng)站營銷、營銷型網(wǎng)站建設(shè)、App設(shè)計、定制網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
景德镇市| 广州市| 田东县| 汨罗市| 嘉黎县| 石首市| 齐齐哈尔市| 江永县| 上杭县| 木里| 隆昌县| 延长县| 松溪县| 高安市| 澎湖县| 黄石市| 玛纳斯县| 元氏县| 石棉县| 康平县| 恩施市| 湾仔区| 泸定县| 伊宁县| 太湖县| 冕宁县| 兰西县| 都昌县| 十堰市| 正阳县| 黄大仙区| 榆树市| 闽侯县| 辉南县| 广昌县| 黑河市| 马鞍山市| 南乐县| 汪清县| 曲沃县| 岢岚县|