Python中用户输入和预期输出的单元测试

Python中用户输入和预期输出的单元测试,python,unit-testing,input,mocking,Python,Unit Testing,Input,Mocking,我对Python中的单元测试相当陌生,但我做了一些工作,因此我了解了它的基本知识。我遇到的一个问题是能够模拟输入,然后基于模拟输入测试标准输出。我在这篇文章中尝试了这个解决方案: 但在给定的方法中没有发现任何成功。我的测试好像在要求输入时被挂断了。我希望能够模拟运行模块的输入,然后能够测试标准输出,标准输出可以是真/假,这是我的运行代码 #imports import random def main(): #variables dolphins = random.randran

我对Python中的单元测试相当陌生,但我做了一些工作,因此我了解了它的基本知识。我遇到的一个问题是能够模拟输入,然后基于模拟输入测试标准输出。我在这篇文章中尝试了这个解决方案: 但在给定的方法中没有发现任何成功。我的测试好像在要求输入时被挂断了。我希望能够模拟
运行
模块的输入,然后能够测试标准输出,标准输出可以是
真/假
,这是我的
运行
代码

#imports
import random

def main():
    #variables
    dolphins = random.randrange(1,11)

    guess = int(input("This is a prompt"))

    print(guess == dolphins)
这里很简单。这是我的测试套件

import unittest
from unittest.mock import patch

from Run import *

class GetInputTest(unittest.TestCase):

  @patch('builtins.input', return_value=1)
  def test_answer_false(self, input):
    self.assertEqual(main(), 'False')


if __name__ == "__main__":
  unittest.main()
因此,我在这里输入一个
1
的值,然后在我的断言过程中调用
main()
,并期望值
False
,但它甚至没有走那么远,程序只是连续运行,我想这是因为它在等待
输入,而我可能没有正确地模拟它。我还尝试输入
内置项。将
输入到
@patch
参数中,我得到了相同的结果


没有错误消息或回溯。希望有更多经验的人能告诉我我做错了什么。提前谢谢你们帮助我

您可以将main设置为接受参数的函数

def main(args):
    ...do stuff

if __name__ == '__main__':
    args = input('Get input')
    main(args)
然后将它作为一个普通函数进行单元测试

class TestMain(unittest.TestCase):
    def testmain(self):
        self.assertTrue(main(5), 'foo')

如果您仍然希望在main中输入,那么您需要模拟补丁
input
而不是
main

,因此我需要
内置。input
而不是main?因为我仍然想在
main
中调用input,所以您需要执行
@patch('input',return_value)
。我假设您使用的补丁是正确的,但请尝试一下。因此,我更新了代码,对输入进行了修补。我不能只把
输入
放进去,我还必须添加
内置的
。这给了我以下断言错误
AssertionError:None!='False
我认为这是因为
main()
没有在
Run
模块中被调用。所以我打电话给它,我仍然有一个问题,它会挂断。这里有什么见解吗?我也试过了,在返回打印(guess==dolphins)之前我有这一行,但是testsuite仍然挂起,并且没有完全运行测试。它似乎在等待输入,而不是接受我修补过的输入。我认为自己找出问题所在将是一次很好的学习体验。