Python Unittest在while循环中检查输入

时间:2014-08-08 21:40:21

标签: python unit-testing

我是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()

先谢谢大家

2 个答案:

答案 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'