gpt4 book ai didi

python - 测试给定的输入值是否不从 while True 循环中断

转载 作者:行者123 更新时间:2023-12-04 12:27:32 24 4
gpt4 key购买 nike

我想对一个名为 prompt_process 的函数进行单元测试.该函数的作用是提示是否调用另一个函数,process ,或完全退出程序,基于 input 的返回值:
process.py

import sys


def process():
pass


def prompt_process():
answer = input("Do you want to process? (y/n)").lower()
while True:
if answer == 'y':
return process()
elif answer == 'n':
sys.exit(0)
else:
answer = input("Invalid answer - please type y or n").lower()
测试 if/ elif子句使用模拟很简单:
test_process.py
import unittest
from unittest import mock

import process


class TestProcess(unittest.TestCase):
@mock.patch('process.process')
def test_prompt_process_calls_process_if_input_is_y(self, mock_process):
with mock.patch('process.input', return_value='y'):
process.prompt_process()
mock_process.assert_called_once()

def test_prompt_process_exits_if_input_is_n(self):
with mock.patch('process.input', return_value='n'):
with self.assertRaises(SystemExit):
process.prompt_process()


if __name__ == '__main__':
unittest.main()
但我不知道如何测试 else函数的子句。理想情况下,它应该测试循环是否继续为 y 以外的输入值运行。和 n ,但因为我不能“模拟”一个 while True循环我不知道如何进行。
有没有测试这个的解决方案,或者这是我首先不应该打扰的事情?

最佳答案

调用 sys.exit(0)在一个函数内不能被视为最佳实践,可能有打开的文件、挂起的事务或其他事务/暂时挂起的操作。
建议是创建一个执行导出的函数并在要测试的函数内调用该函数。这样你的函数应该很容易测试。

import sys


def process():
pass

def leave():
sys.exit(0)

def prompt_process():
answer = input("Do you want to process? (y/n)").lower()
while True:
if answer == 'y':
return process()
elif answer == 'n':
return leave()
else:
answer = input("Invalid answer - please type y or n").lower()

关于python - 测试给定的输入值是否不从 while True 循环中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69497759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com