You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Replit单元测试中如何测试含用户输入的Python函数?

在Replit中测试含用户输入的Python函数

问题原因

Replit的单元测试环境是非交互式的,当函数调用input()时,无法从标准输入(sys.stdin)获取内容,因此抛出RuntimeError: input(): lost sys.stdin错误。

解决方案

方法1:重构函数,解耦输入逻辑(推荐)

把函数内部的输入获取逻辑抽离,让函数接收外部传入的参数,既保留原函数的交互式使用场景,又方便单元测试直接传参。

修改后的函数:

def play(n, num=None):
    if num is None:
        num = int(input("Enter the amount"))
    # 保留原有的业务逻辑(比如用n和num判断返回值的代码)
    return num

对应的测试代码:

self.assertTrue(play(10, num=5) < 6)

方法2:使用mock模拟输入

如果不想修改原函数,可以用Python标准库unittest.mock模块替换input()的返回值,让函数在测试时拿到预设的输入内容。

测试代码示例:

from unittest.mock import patch
import unittest

class TestPlayFunction(unittest.TestCase):
    @patch('builtins.input', return_value='5')
    def test_play(self, mock_input):
        # 模拟input()返回'5',转换为int后是5
        self.assertTrue(play(10) < 6)

if __name__ == '__main__':
    unittest.main()

内容的提问来源于stack exchange,提问作者Chanya Subasingha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:47:01