我有以下内容:
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库测试此功能?
答案 0 :(得分:2)
我假设您的代码位于名为mymodule.py
的模块中。因此,您可以创建一个测试文件名test_mymodule.py
来实施您的测试。您想要做的就是使用unittest.mock模块来访问patch()函数,以装饰内置输入。
这是什么意思,而不是调用输入函数来请求用户输入,而是对它进行修补以返回side_effect
中定义的值。因此,每次调用输入都将返回列表的值。请注意,您还应该包括0,否则测试将无法进行。
对于每个输入序列,您都必须手动计算(甚至使用程序进行计算)以提供方法assertEqual的最终结果。
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)
每个测试方法的名称应以test_
为前缀。在CLI中使用python -m unittest
时,默认模式会在当前目录中查找test*.py
(与运行TestLoader.discover()相同。您可以根据需要更改此设置,但可以来查看unittest文档以了解更多详细信息。