我是python单元测试的新手,我已经取得了一些成功,但我仍然坚持这个单元测试。我试图尝试检查名为item
的输入方法并模拟输入。我没有收到任何测试结果。我很可能做错了,所以任何帮助都会很棒。这是正在测试的代码
def get_input():
myList = []
popMax = 6
while len(myList) < popMax:
item = input("Enter a number: ")
if item == "exit":
break
else:
myList.append(item)
print(myList)
print("This is your list!")
print(myList)
这是测试套件
import unittest
from unittest.mock import patch
from get_input import *
class GetInputTest(unittest.TestCase):
@patch('builtins.input', return_value='yes')
def test_answer_yes(self, input):
self.assertEqual(get_input(), 'yes')
if __name__ == "__main__":
unittest.main()
先谢谢大家
答案 0 :(得分:0)
你的循环是一个无限循环(至少在你的测试用例的上下文中)。实际上,摆脱循环的唯一方法是让输入“退出”,这在您的测试用例中不会发生。
此外,还不清楚get_input()是如何工作的,因为你定义了popMax和myList,但实际上并没有在函数中使用它们......也许你想在循环中做myList.append(item)?
答案 1 :(得分:0)
它应该是您运行测试的方式。这是我的测试代码,并手动运行测试。它按预期运行,因为&#39;是&#39;不会满足退出&#39;退出&#39;测试,您将在列表中获得6个项目。
def get_input():
myList = []
popMax = 6
while len(myList) < popMax:
item = input("Enter a number: ")
if item == "exit":
break
else:
myList.append(item)
print(myList)
print("This is your list!")
print(myList)
class GetInputTest(unittest.TestCase):
@patch('builtins.input', return_value='1\n2\n3\n4\n5\n6\n')
def test_answer_yes(self, input):
self.assertEqual(get_input(), 'yes')
>>> a = GetInputTest()
>>> a.test_answer_yes()
['yes']
['yes', 'yes']
['yes', 'yes', 'yes']
['yes', 'yes', 'yes', 'yes']
['yes', 'yes', 'yes', 'yes', 'yes']
['yes', 'yes', 'yes', 'yes', 'yes', 'yes']
This is your list!
['yes', 'yes', 'yes', 'yes', 'yes', 'yes']
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
a.test_answer_yes()
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/unittest/mock.py", line 1136, in patched
return func(*args, **keywargs)
File "<pyshell#9>", line 4, in test_answer_yes
self.assertEqual(get_input(), 'yes')
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/unittest/case.py", line 797, in assertEqual
assertion_func(first, second, msg=msg)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/unittest/case.py", line 790, in _baseAssertEqual
raise self.failureException(msg)
AssertionError: None != 'yes'