python - 模拟标准输入 - python 3中的多行

标签 python unit-testing python-3.x lambda patch

我是 python 的新手,一直在使用 python 3 进行学习。我正在使用 python 的单元测试框架来测试我的代码。

问题:-

我需要进行单元测试的函数以下列方式接受输入:-

def compare():
   a, b, c = input().strip().split(' ')
   d, e, f = input().strip().split(' ')
   # other code here

我正在使用以下测试用例来模拟输入:-

class TestCompare(unittest.TestCase):

   @patch("builtins.input", lambda: "1 2 3")
   @patch("builtins.input", lambda: "4 5 6")
   def test_compare(self):
      self.assertEqual(compare(), "1 1")

我面临的问题是,当测试用例运行时,变量三元组 a、b、c 和 d、e、f 具有相同的值 - 1、2、3

我一直在尝试寻找一种方法来注入(inject)第二组输入来运行我的测试,但没有成功。

非常感谢与上述相关的任何帮助。

解决方案环境:- Python 3

最佳答案

你不能像那样修补它两次。您必须使用一个在后续调用中返回不同值的对象来修补它一次。这是一个例子:

fake_input = iter(['1 2 3', '4 5 6']).__next__

@patch("builtins.input", fake_input)
def test_compare(self):
    ...

关于python - 模拟标准输入 - python 3中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908390/

相关文章:

python - 列表理解与列表和元组列表

python - 在 Python 中发送带有 HTML+plain_text 电子邮件的 PDF 附件

unit-testing - PHPUnit 中的模拟与 stub

python - Tkinter:如何设置 Canvas 中文本小部件的relwidth?

python - 将 Python 2.7 和 3.x 解释器添加到 PyCharm

python-3.x - 在python中命名轴

python - VSCode 在 linter 中无法解析导入 'sys'

python - Django 和原始 Python 之间的性能

java - 使用模拟构造函数参数模拟抽象类?

ios - 如何在 Swift 中使用 OCMock 模拟来自 AFNetworking 的响应?