doctest 预期无返回

2 投票
1 回答
2459 浏览
提问于 2025-04-18 15:01

我对这个doctest的问题感到困惑。

from collections import namedtuple
Match = namedtuple('Match', ['token_string', 'normalised_token',
                     'brand_name', 'brand_id',
                     'score'])

def make_match(tokens, normalised, brand, score):
    """
    Examples:
    >>> make_match('Jack Jones','JackJones',('Jack Jones','X023'),0.6)==Match('Jack Jones','JackJones','Jack Jones','X023',0.6)
    >>> True 
    >>> make_match('Jack Jones','JackJones',('Jack Jones','X023'),0.6)==('Jack Jones','JackJones','Jack Jones','X023',0.6)
    >>> True
    """
    return Match(token_string=tokens,
         normalised_token=normalised,
         brand_name=brand[0],
         brand_id=brand[1],
         score=score)

然后我遇到了这样的测试失败:

Failed example:
make_match('Jack Jones','JackJones',('Jack Jones','X023'),0.6)==Match('Jack Jones','JackJones','Jack Jones','X023',0.6)
Expected nothing
Got:
True
**********************************************************************
File "utilization.py", line 15, in utilization.make_match
Failed example:
True 
Expected nothing
Got:
True
**********************************************************************
1 items had failures:
4 of   4 in utilization.make_match
***Test Failed*** 4 failures.

这真奇怪。我不是已经声明要期待“True”了吗?

非常感谢你。

1 个回答

6

你的测试用例格式不对,跟你在解释器里看到的格式不一致。比如,应该不是这样:

>>> make_match('Jack Jones','JackJones',('Jack Jones','X023'),0.6)==Match('Jack Jones','JackJones','Jack Jones','X023',0.6)
>>> True 

而是应该这样:

>>> make_match('Jack Jones','JackJones',('Jack Jones','X023'),0.6)==Match('Jack Jones','JackJones','Jack Jones','X023',0.6)
True 

注意,输出部分没有出现>>>。这也是为什么你看到四个测试,而不是你预期的两个;True被当成了一个新的测试,而不是上一个测试的预期结果。

撰写回答