【问题标题】:Doctest python - Ignore order of listsDoctest python - 忽略列表的顺序
【发布时间】:2019-08-22 16:07:35
【问题描述】:

是否有一个 doctest 指令在匹配预期列表和返回列表时忽略元素的顺序。

目前失败:

Expected:
  ['foo', 'bar']
Got:
  ['bar', 'foo']

【问题讨论】:

  • 也许您想使用set 而不是list
  • A list 是一个有序的数据结构,因此忽略它与一开始就使用这种数据结构的观点相悖。到底是什么测试?

标签: python doctest


【解决方案1】:

Doctest 总是匹配字符串输出。如果您想忽略列表元素的顺序,一种推荐的解决方案是使用sorted

这个摘自doctest docs的最后一个例子:

doctest 非常重视在预期输出中要求完全匹配。 如果一个字符都不匹配,则测试失败。这会 可能会让你大吃一惊,因为你确切地了解了 Python 做和不保证输出。例如,当打印一个 set,Python 不保证该元素以任何形式打印 特定的顺序,所以像

这样的测试
>>>
>>> foo()
{"Hermione", "Harry"}

很脆弱!一种解决方法是做

>>>
>>> foo() == {"Hermione", "Harry"}
True

相反。另一种是做

>>>
>>> d = sorted(foo())
>>> d

['哈利','赫敏']

【讨论】:

    【解决方案2】:

    问题已解决。

    原来我正在打印列表,所以 doctest 试图匹配字符串而不是列表。

    FTR,doctest 确实匹配忽略元素顺序的列表。

    【讨论】:

    • 嗨@priyansh-agrawal,这似乎是一个不正确的“解决”。 Doctest 匹配字符串输出。通过 doctest 文档中的示例查看我的答案。
    猜你喜欢
    • 2014-05-13
    • 2021-08-31
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    相关资源
    最近更新 更多