防止涉及无序输出时doctest错误失败
Prevent doctest incorrect failure when unordered output is involved
假设我们有以下函数:
def f(x):
"""
Turns x into a set.
>>> given_x = ['a', 'b', 'c', 'd', 'e', 'f']
>>> f(given_x)
{'a', 'b', 'c', 'd', 'e', 'f'}
"""
return set(x)
运行 doctest(通常)会导致这样的事情:
Failure
**********************************************************************
File "/home/black/Dev/exp_2.py", line 6, in f
Failed example:
f(given_x)
Expected:
{'a', 'b', 'c', 'd', 'e', 'f'}
Got:
{'d', 'e', 'f', 'c', 'a', 'b'}
显然,此故障不应该发生,因为该函数按预期工作,但它确实发生了,因为结果是无序的。
我的实际函数输出可能比这复杂得多。它可以是一个包含字典、集合、列表的字典。
我需要一个通用的解决方案(如果有的话)。简单地 sort()
给出的示例并不能解决我的真实案例问题。
问题:
当涉及无序输出时,如何防止 doctest(错误地)失败?
无法保证 python 套的顺序,因此您不能依赖它。
我会强制提供您可以信任的东西:
>>> given_x = ['z','a', 'a', 'b', 'c', 'd', 'e', 'f']
>>> type(f(given_x))
<type 'dict'>
>>> sorted(list(f(given(x)))
['a', 'b', 'c', 'd', 'e', 'f','z']
我测试它有预期的类型,它确实做了集合的 "uniqueness" 结果是我所期望的
为什么不将预期输出向上移动以便测试是否相等,预期输出为 "True"?
def f(x):
"""
Turns x into a set.
>>> given_x = ['a', 'b', 'c', 'd', 'e', 'f']
>>> f(given_x) == {'a', 'b', 'c', 'd', 'e', 'f'}
True
"""
return set(x)
输出:
Trying:
given_x = ['a', 'b', 'c', 'd', 'e', 'f']
Expecting nothing
ok
Trying:
f(given_x) == {'a', 'b', 'c', 'd', 'e', 'f'}
Expecting:
True
ok
假设我们有以下函数:
def f(x):
"""
Turns x into a set.
>>> given_x = ['a', 'b', 'c', 'd', 'e', 'f']
>>> f(given_x)
{'a', 'b', 'c', 'd', 'e', 'f'}
"""
return set(x)
运行 doctest(通常)会导致这样的事情:
Failure
**********************************************************************
File "/home/black/Dev/exp_2.py", line 6, in f
Failed example:
f(given_x)
Expected:
{'a', 'b', 'c', 'd', 'e', 'f'}
Got:
{'d', 'e', 'f', 'c', 'a', 'b'}
显然,此故障不应该发生,因为该函数按预期工作,但它确实发生了,因为结果是无序的。
我的实际函数输出可能比这复杂得多。它可以是一个包含字典、集合、列表的字典。
我需要一个通用的解决方案(如果有的话)。简单地 sort()
给出的示例并不能解决我的真实案例问题。
问题:
当涉及无序输出时,如何防止 doctest(错误地)失败?
无法保证 python 套的顺序,因此您不能依赖它。
我会强制提供您可以信任的东西:
>>> given_x = ['z','a', 'a', 'b', 'c', 'd', 'e', 'f']
>>> type(f(given_x))
<type 'dict'>
>>> sorted(list(f(given(x)))
['a', 'b', 'c', 'd', 'e', 'f','z']
我测试它有预期的类型,它确实做了集合的 "uniqueness" 结果是我所期望的
为什么不将预期输出向上移动以便测试是否相等,预期输出为 "True"?
def f(x):
"""
Turns x into a set.
>>> given_x = ['a', 'b', 'c', 'd', 'e', 'f']
>>> f(given_x) == {'a', 'b', 'c', 'd', 'e', 'f'}
True
"""
return set(x)
输出:
Trying:
given_x = ['a', 'b', 'c', 'd', 'e', 'f']
Expecting nothing
ok
Trying:
f(given_x) == {'a', 'b', 'c', 'd', 'e', 'f'}
Expecting:
True
ok