Part One
前面一篇博文简单说了使用unittest.mock
对无返回值的函数做单元测试,这里是更多一些例子的总结。
被测函数中使用到了input需要自动化输入
1 | #!/usr/bin/env python3 |
需要验证函数是否被“被测函数“调用
1 | #!/usr/bin/env python3 |
mock.patch()和mock.patch.object()的区别
这一块我还不是特别明白,搜索了下,大致区别如下
mock.patch() doesn’t require that you import the object before patching, while mock.patch.object() does require that you import before patching
有一个遗留问题,如下代码中,完全不能使用mock.patch()吗?
1 | # py_unittest.py |
Part Two
今天研究了下,问题解决了,关键还是一个查找module的问题。
小结一个import的基础用法
很多源代码里看到这样的用法,from flask import Flask
,from models.item import ItemModel
,然后当我自己创建了一个名字叫person的module的时候,如果我也想在其他代码里方便的使用from person import Person
来导入Person
类的话,可以这样做。
创建person目录,同时目录下有__init__.py
和person.py
两个文件,
person.py
中定义了一个Person
类,有__init__.py
文件存在,则会定义这个目录是一个module,同时文件内容如下:
1 | __all__ = ['Person',] |
这样在其他module或者python代码里,就可以通过from person import Person
来导入Person
类了,假如__init__.py
是空的,则需要使用from person.person import Person
来导入Person
类。
回到最开始mock.patch()的问题,解决代码可见于segmentfault上问题关于mock.patch()和mock.patch.object()的区别的问题的回答。