通过docstring等自动化测试
fastest的Python项目详细描述
最快
根据docstring中的示例及其他内容创建单元测试。
安装
$ pip install fastest
用法
$ fastest
监视所有.py文件并为整个项目创建覆盖范围。
$ fastest --path=$(pwd) --source=py_module
其中path
是项目根目录,并且^{coverage run -m unittest --source=$source test
的值相同
$ fastest --exclude=dont_check_this_dir/*,these__*.py
要排除文件/文件夹,请使用--exclude
,文件监视程序将忽略它们。
默认情况下,faster
创建的test/*
文件夹被排除在外。
$ fastest --poll-duration=10
每隔10s
生成文件、运行测试和覆盖率,默认值为1s
运行时发生的事情python main.py --path=$(pwd)
:
- 在项目根目录中检查
test
文件,如果找不到则创建该文件。 - 监视
.py
文件的更改。 - 如果函数的docstrings中有如下示例,则创建unittests:
# .# ├──module_a# ├──module_b# └── utils.py#defadd(x,y):""" ---- examples: 1) add(3, 4) -> 7 """returnx+y
这将在test
目录中创建一个unittest,assertEqual(add(3, 4), 7)
在Class test_<file>_<function>(self)
内
(对于给定的目录,树:Class test_utils_add(self)
)
- 运行创建的所有测试
- 创建覆盖率报告(html格式)
- 打印到覆盖率报告index.html的链接。
如何充分利用最快速度
- 保持你的
functions
轻:- 偏执于关注点的分离。
- 太多的条件暗示您可能需要另一个函数
- 复杂的循环和
if-else
不是可伸缩的代码,一个错误就会 把那座塔拿下来,增加一些功能需要有人通过 那个脑筋急转弯。
- 使用库,但用自己的函数包装它们类似:使用^ {CD18}}还是不可避免的数据库?
用你自己的功能包装它们。
- 有助于在一个地方添加自定义设置(配置基本URL和类似配置等内容)
- 帮助模拟,以便可以对整个代码库进行单元测试。
- 如果您的工作速度太快,无法维护高质量的文档,docstring可能会过时。 现在添加示例可以帮助您创建 防止描述过时的测试,如果测试失败, 可能文档也需要再次查看。由于文档是 有助于测试。
示例:
- 允许在docstrings中创建变量,包括lambda函数!
defquick_maths(a,b):""" ---- examples: @let a = { 'apples': 3, 'oranges': 4 } @end 1) quick_maths(a['apples'], a['oranges']) -> 7 ---- """returna+b
- 可以在
@let--@end
块中运行任何有效的python代码。 - 可以包括项目外部已安装的模块。
defcurrent_time():""" --- examples: @need from datetime import datetime @end 1) current_time() -> datetime.now() """returndatetime.now()
- 如果类型被添加到docstring,fast将创建测试
用于检查针对空参数返回的值的类型。
defchain_strings(str1,str2):""" :param str1: str :param str2: str :return: str """returnstr1+str2
faster将为上述代码片段创建一个assertInstanceIs(chain_strings('', ''), str)
。 - 要创建
assertRaises
测试用例:defcrashes_sometimes(input_string):""" ---- examples: !! crashes_sometimes(None) -> ValueError ---- """ifnotinput_string:raiseValueErrorreturninput_string
用!! crashes_sometimes(None) -> ValueError
标记的语法处理异常 代码抛出的
最快的目标
- [X]帮助维护测试、代码覆盖率和文档。
- []帮助解决代码中的性能问题
- []提供代码的可测试性得分
- []在代码可能崩溃的情况下,测试自动生成的输入的函数。
最快使用自己的创建测试和管理覆盖率100%