首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在这个python-inquirer脚本中覆盖率不是100%?

为什么在这个python-inquirer脚本中覆盖率不是100%?
EN

Stack Overflow用户
提问于 2020-05-11 03:38:12
回答 1查看 245关注 0票数 1

我有一个简单的方法,它接收交易列表(描述和id )并返回所选交易的id。如果未选择任何选项,系统将要求您进行确认。我使用python-inquirer来做这件事:

代码语言:javascript
复制
# question.py
from typing import List, Tuple
import inquirer

def select_trades(trades: List[Tuple[str, int]]) -> List[int]:
    while True:
        selection = inquirer.prompt(
            [
                inquirer.Checkbox(
                    "trades",
                    message=(
                        "Select auction trades? "
                        "(press space to select and enter to finish)"
                    ),
                    choices=trades,
                )
            ]
        )["trades"]
        if len(selection) == 0:
            answer = inquirer.prompt(
                [
                    inquirer.List(
                        "",
                        message="No trade selected.\nDo you confirm?",
                        choices=["Yes", "No"],
                    )
                ]
            )[""]
            if answer == "Yes":
                return []
        else:
            break
    return selection

我做了两个测试用例。如果选择了无,则不确认,再次选择无并确认。在另一种情况下,您选择id 1:

代码语言:javascript
复制
# test_question.py
from unittest.mock import patch

from question import select_trades

@patch(
    "inquirer.prompt",
    side_effect=[{"trades": []}, {"": "No"}, {"trades": []}, {"": "Yes"}],
)
def test_select_trades_empty(mock_inquirer_prompt) -> None:
    trades = [("trade 1", 0), ("trade 2", 1)]
    assert select_trades(trades) == []


@patch("inquirer.prompt", return_value={"trades": [1]})
def test_select_trades_some_selected(mock_inquirer_prompt) -> None:
    trades = [("trade 1", 0), ("trade 2", 1)]
    assert select_trades(trades) == [1]

由于某种原因,覆盖率表明break like没有被覆盖,但在第二个测试用例中,while True中断并返回测试的期望值。我不明白为什么在这个案例中没有100%覆盖它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-11 08:46:35

这是由于Python对跳转进行了优化,使得Coverage.py无法看到这一行被覆盖(https://github.com/nedbat/coveragepy/issues/198)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61717745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档