首页 > 解决方案 > 在python中对没有返回值的函数进行单元测试

问题描述

我有一个函数应该只从请求列表中选择前 10 个请求:

def prioritize_top_10_requests(list_of_requests):
if not list_of_requests:
    system.exit(1)
else:
    for i in list_of_requests[0:10]:
        print i

我想为这个函数编写一个单元测试,只是为了检查“i”是否被打印了 10 次,尽管我们有更多的请求列表。

我是第一次编写 python 单元测试用例。

标签: python-3.xunit-testing

解决方案


我没有设置python3。以下代码适用于 Python 3。

它的作用如下。

  • 使用一个测试“test_priority”创建了一个 UnitTest 测试用例。
  • 在测试中,将标准输出重定向到一个字符串。
  • 然后执行函数。
  • 从字符串中收集打印结果。
  • 删除 None 和空字符串并找到长度。
  • 检查它是否等于 10。
import unittest
from io import StringIO
import sys

def prioritize_top_10_requests(list_of_requests):
    for i in list_of_requests[0:10]:
        print(i)

class TestMyCode(unittest.TestCase):
    def test_priority(self):
        sys.stdout = result = StringIO()
        prioritize_top_10_requests(range(100))
        sys.stdout = sys.__stdout__
        printed_lines = result.getvalue()
        print_count = len(printed_lines.strip().split('\n'))
        self.assertEqual(print_count, 10)

if __name__ == '__main__':
    unittest.main()

推荐阅读