Python中用户输入和预期输出的单元测试
我对Python中的单元测试相当陌生,但我做了一些工作,因此我了解了它的基本知识。我遇到的一个问题是能够模拟输入,然后基于模拟输入测试标准输出。我在这篇文章中尝试了这个解决方案: 但在给定的方法中没有发现任何成功。我的测试好像在要求输入时被挂断了。我希望能够模拟Python中用户输入和预期输出的单元测试,python,unit-testing,input,mocking,Python,Unit Testing,Input,Mocking,我对Python中的单元测试相当陌生,但我做了一些工作,因此我了解了它的基本知识。我遇到的一个问题是能够模拟输入,然后基于模拟输入测试标准输出。我在这篇文章中尝试了这个解决方案: 但在给定的方法中没有发现任何成功。我的测试好像在要求输入时被挂断了。我希望能够模拟运行模块的输入,然后能够测试标准输出,标准输出可以是真/假,这是我的运行代码 #imports import random def main(): #variables dolphins = random.randran
运行
模块的输入,然后能够测试标准输出,标准输出可以是真/假
,这是我的运行
代码
#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仍然挂起,并且没有完全运行测试。它似乎在等待输入,而不是接受我修补过的输入。我认为自己找出问题所在将是一次很好的学习体验。