如何从方法文档字符串/注释中的特殊语法自动生成单元测试例程?
How to automatically generate unit testing routines from special syntax in method docstring / comment?
这是我正在寻找的模型:
def is_even(a, b):
"""Returns True if both numbers are even.
@AutoUnitTestTag:
- (0,2) -> True
- (2,1) -> False
- (3,5) -> False
"""
return (a % 2 == 0 and b % 2 == 0)
是否有一种工具可以允许在函数的文档字符串中插入紧凑的语法定义的单元测试,然后自动生成 unittest_foobar.py
单元测试例程?
我几乎可以肯定我之前看过这个,但找不到了。
编辑:@mkrieger1 在下面的评论中建议使用 doctest
,在试用了一下之后,我认为这是一个非常合适的解决方案。
但是,我想让这个问题再拖久一点,以便收集更多建议,尤其是关于更复杂工具的建议。
如果有人感兴趣,下面是在我的示例案例中如何使用 doctest:
- 文件
is_even.py
中的格式函数如下所示:
def is_even(a,b):
"""Returns True if both numbers are even.
>>> is_even(0,2)
True
>>> is_even(2,1)
False
>>> is_even(3,5)
False
"""
return (a % 2 == 0 and b % 2 == 0)
- 然后运行命令
python3 -m doctest is_even.py
。
输出将如下所示:
Trying:
is_even(0,2)
Expecting:
True
ok
Trying:
is_even(2,1)
Expecting:
False
ok
Trying:
is_even(3,5)
Expecting:
False
ok
1 items had no tests:
foo2
1 items passed all tests:
3 tests in foo2.is_even
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
它叫做 doctest,它是标准库的一部分。但是你必须稍微改变一下你的语法:
def is_even(a, b):
"""Returns True if both numbers are even.
>>> is_even(0, 2)
True
>>> is_even(2, 1)
False
>>> is_even(3, 5)
False
"""
return (a % 2 == 0 and b % 2 == 0)
您可以运行它:
python -m doctest is_even.py
语法的设计使您几乎可以从交互式 (C)Python 解释器会话中复制和粘贴测试,因此有充分的理由不尝试更改它。此外,其他 Python 开发人员已经熟悉这种语法,而不是您可能想出的任何自定义内容。
这是我正在寻找的模型:
def is_even(a, b):
"""Returns True if both numbers are even.
@AutoUnitTestTag:
- (0,2) -> True
- (2,1) -> False
- (3,5) -> False
"""
return (a % 2 == 0 and b % 2 == 0)
是否有一种工具可以允许在函数的文档字符串中插入紧凑的语法定义的单元测试,然后自动生成 unittest_foobar.py
单元测试例程?
我几乎可以肯定我之前看过这个,但找不到了。
编辑:@mkrieger1 在下面的评论中建议使用 doctest
,在试用了一下之后,我认为这是一个非常合适的解决方案。
但是,我想让这个问题再拖久一点,以便收集更多建议,尤其是关于更复杂工具的建议。
如果有人感兴趣,下面是在我的示例案例中如何使用 doctest:
- 文件
is_even.py
中的格式函数如下所示:
def is_even(a,b):
"""Returns True if both numbers are even.
>>> is_even(0,2)
True
>>> is_even(2,1)
False
>>> is_even(3,5)
False
"""
return (a % 2 == 0 and b % 2 == 0)
- 然后运行命令
python3 -m doctest is_even.py
。 输出将如下所示:
Trying:
is_even(0,2)
Expecting:
True
ok
Trying:
is_even(2,1)
Expecting:
False
ok
Trying:
is_even(3,5)
Expecting:
False
ok
1 items had no tests:
foo2
1 items passed all tests:
3 tests in foo2.is_even
3 tests in 2 items.
3 passed and 0 failed.
Test passed.
它叫做 doctest,它是标准库的一部分。但是你必须稍微改变一下你的语法:
def is_even(a, b):
"""Returns True if both numbers are even.
>>> is_even(0, 2)
True
>>> is_even(2, 1)
False
>>> is_even(3, 5)
False
"""
return (a % 2 == 0 and b % 2 == 0)
您可以运行它:
python -m doctest is_even.py
语法的设计使您几乎可以从交互式 (C)Python 解释器会话中复制和粘贴测试,因此有充分的理由不尝试更改它。此外,其他 Python 开发人员已经熟悉这种语法,而不是您可能想出的任何自定义内容。