国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python高级 > Python和单元测试那些事儿

Python和单元测试那些事儿

头像

silencement

2019-07-17 15:45:104285浏览 · 0收藏 · 0评论

我们来说说目前几个和测试有关的东西(全程 Python 3)。

Mock

Mock是个好东西呀,遇到测试中出现的不可预知的或者不稳定因素,就用 Mock 来代 替。例如查询数据库(当然像目前我们用的MongoDB,由于特别灵活,可以直接在代码里 把相应的collection替换掉),例如异步任务等。举个例子:

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 里,这样既能测试用,又能当文档 示例,是在是好用之极啊。缺点是,如果测试太复杂,doctest就显得太臃肿了(例如 如果测试之前要导入一堆东西)。举个例子:

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...")

测试结果

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

unittest

这个文档确实有点长,我感觉还是仔细去读一下文档比较好。

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

输出结果

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

OK

unittest框架配合上Mock,单元测试基本无忧啦。

pytest

上面的单元测试跑起来比较麻烦,当然也可以写一个脚本遍历所有的单元测试文件,然 后执行。不过 pytest 对unittest有比较好的支持。

pytest默认支持的是 函数 风格的测试,但是我们可以不用这一块嘛(而且很多时候 还是很有用的)。走进项目根目录,输入 pytest 就可以啦。它会自动发现 test_ 开头的文件,然后执行其中 test_ 开头的函数和 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:

总结

编译器没给python做检查,就只有靠我们手写测试了 :(

另外其实 pytest 和 unittest 都有很多强大的特性,例如 fixture,例如 skip 掉某一部分测试。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

98在线高清免费观看电视剧狂飙| 《在线观看交换做爰》| 男生困困进女生困困洞视频| 日本大片又大又好看的PPT| 人野兽马狗猪大全| 《公与媳夫妇:交换》| 18岁的少女与狗高清电视剧| 无人区免费高清版观看| 《俄罗斯空姐2(俄罗斯航空)》| B站夫妻进入高峰期需要多久| 天美麻花星空高清MV播放音乐| 美国式禁忌5老熟女| 叛逆儿子暴躁老妈的表现| 俄罗斯姑娘免费看高清电视剧| 小雪被老汉各种姿势玩弄视频| 扒灰小调公媳干仗艳丽是谁唱的| 阿宾传奇| 雨后小故事动图| 回娘家白天像父女晚上像夫妻| 性饥渴美国女兵理论片| 《黏糊糊的你》免费观看| 老公弄我一边干一边说粗话视频| 向日葵在线观看免费高清电视剧| 舞蹈生带着小玩具练芭蕾视频| 大姨妈来了同房内射吃避孕药| 快拨出天我是你母亲歌词监控| 老公不在家憋不住了该怎么办| 台湾版《黄花闺女》完整版| 漂亮的女邻居5》HD| 一路向西在线播放| 摸腿吻戏| 禁忌1蜜桃熟了| 蜜桃成熟 在线| 雨后小故事动图| 1.120分钟免费观看电视剧大全| 免费观看《艳乳欲乱2》| 舌头伸进去添的我爽高潮| 免费高清在线观看免费的PPT软...| 《欢迎来到!浪荡精灵之森》动漫..| 成人视频在线观看| 里番