【问题标题】:python testing, how handle 'continue' statement looppython测试,如何处理\'continue\'语句循环
【发布时间】:2022-09-27 21:44:10
【问题描述】:

我正在学习如何使用 Python。我有一个内部带有条件的函数,如果提供了无效输入,它应该重新启动循环,直到提供有效输入。

不幸的是,这种“重启”行为在我的测试中导致了无限循环(它循环提供了错误的输入)。如何暂停、中断或将输出限制为一个实例,以便测试返回的字符串?

功能:

def confirm_user_choice(choice: str):
    while True:
        user_response = input(f\"\\nYou chose \'{choice}\', is this correct? y/n \")
        if user_response == \"y\":
            return True
        elif user_response == \"n\":
            return False
        else:
            print(\"\\nSelect either \'y\' (yes) or \'n\' (no)\")
            continue

测试:

import unittest
from unittest import mock
from src.utils.utils import addValues, confirm_user_choice


class TestConfirmUserChoice(unittest.TestCase):
    def test_yes(self):
        with mock.patch(\"builtins.input\", return_value=\"y\"):
            result = confirm_user_choice(\"y\")
        self.assertEqual(result, True)

    def test_no(self):
        with mock.patch(\"builtins.input\", return_value=\"n\"):
            result = confirm_user_choice(\"n\")
        self.assertEqual(result, False)

    def test_invalid_input(self):
        with mock.patch(\"builtins.input\", return_value=\"apple\"):   <-- triggers func else case
            result = confirm_user_choice(\"apple\")
        self.assertEqual(result, False)

    标签: python unit-testing python-unittest


    【解决方案1】:

    continue 在您的代码中不执行任何操作
    continue 允许您忽略某些循环实例的部分代码。

    例如 :

    for i in range(2):
       if i < 1:
          continue
       print(i)
    

    输出 :

    1

    对于您想做的事情,不要忘记while 应该在满足条件时结束。因此,使用 while True: 绕过条件,然后使用 if 退出循环有点适得其反。

    只需使用 while 条件:

    user_response = ""
    while user_response not in ["y", "n"]:
        user_response = input("y/n ? ")
    print(user_response)
    

    快乐编程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-01
      • 2021-08-05
      • 1970-01-01
      • 2015-01-11
      • 2016-08-09
      • 2015-01-18
      • 2012-05-19
      • 1970-01-01
      相关资源
      最近更新 更多