使用输入在循环内时的Python单元测试
我有以下资料:使用输入在循环内时的Python单元测试,python,unit-testing,python-unittest,Python,Unit Testing,Python Unittest,我有以下资料: def func(): s = 1 i = -1 while i != 0: s += i i = int(input()) return s if __name__ == "__main__": result = func() print(str(result)) 您将看到对该函数只进行了一次调用,但该函数包含一个循环,该循环将一直迭代,直到用户输入值0为止 如何使用unittest库测试此函数
def func():
s = 1
i = -1
while i != 0:
s += i
i = int(input())
return s
if __name__ == "__main__":
result = func()
print(str(result))
您将看到对该函数只进行了一次调用,但该函数包含一个循环,该循环将一直迭代,直到用户输入值0为止
如何使用unittest库测试此函数 我假设您的代码位于名为
mymodule.py
的模块中。因此,您可以创建一个测试文件名test\u mymodule.py
,以实现您的测试。您要做的是使用模块访问函数,以装饰内置输入
这意味着,您不是调用输入函数来请求用户输入,而是对其进行修补以返回在副作用
中定义的值。因此,每次输入调用都将返回列表的一个值。请注意,还应该包括0,否则测试将无法工作
对于每个输入序列,您必须手动计算(甚至使用您的程序)以提供该方法的最终结果
每个测试方法的名称中都应加上测试
。在CLI中使用python-m unittest
时的默认模式会在当前目录中查找test*.py
(与运行时相同。如果需要,您可能会更改此模式,但您必须查看文档以了解更多详细信息。这是一个很好的起点和起点
import unittest
import unittest.mock
from mymodule import func
class TestModule(unittest.TestCase):
@unittest.mock.patch('builtins.input', side_effect=[1, 2, 3, 0])
def test_func_list1(self, mock):
self.assertEqual(func(), 6)
@unittest.mock.patch('builtins.input', side_effect=[0])
def test_func_list2(self, mock):
self.assertEqual(func(), 0)