求使用unittest.FunctionTestCase测试Python脚本的实际示例
使用unittest.FunctionTestCase测试已有Python函数的正确示例
你的代码存在几个关键问题:
- 不需要在单个测试方法内部创建测试套件并断言用例数量,这不符合unittest的测试流程;
self.assertEqual(suite.testCase1)这类写法完全错误,测试套件没有testCase1属性,且对于无返回值的函数,测试核心是验证它能否正常执行不抛出异常——FunctionTestCase会自动处理这一点:函数执行无异常则测试通过,抛出异常则测试失败。
以下是实际可用的正确示例:
基础用法(无前置/后置操作)
假设你的已有业务函数如下:
def existingFunctionToLoadWebPage(): # 模拟加载网页逻辑,出错时会抛出异常 print("加载网页成功") def existingFunctionToSubmitWebForm(): # 模拟提交表单逻辑,出错时会抛出异常 print("提交表单成功")
用FunctionTestCase包装并运行测试:
import unittest # 已有业务函数 def existingFunctionToLoadWebPage(): print("加载网页成功") def existingFunctionToSubmitWebForm(): print("提交表单成功") # 将普通函数包装为测试用例 test_load_page = unittest.FunctionTestCase(existingFunctionToLoadWebPage) test_submit_form = unittest.FunctionTestCase(existingFunctionToSubmitWebForm) # 组合测试套件 test_suite = unittest.TestSuite([test_load_page, test_submit_form]) # 执行测试 if __name__ == '__main__': runner = unittest.TextTestRunner(verbosity=2) runner.run(test_suite)
带前置/后置操作的用法
如果需要在测试前后执行初始化、清理操作(比如启动/关闭浏览器),可以给FunctionTestCase传入setUp和tearDown函数:
import unittest def test_setup(): print("测试前置:初始化浏览器实例") def test_teardown(): print("测试后置:关闭浏览器实例") # 已有业务函数 def existingFunctionToLoadWebPage(): print("加载网页成功") def existingFunctionToSubmitWebForm(): print("提交表单成功") # 带前置后置的测试用例 test_load_page = unittest.FunctionTestCase( existingFunctionToLoadWebPage, setUp=test_setup, tearDown=test_teardown ) test_submit_form = unittest.FunctionTestCase( existingFunctionToSubmitWebForm, setUp=test_setup, tearDown=test_teardown ) test_suite = unittest.TestSuite([test_load_page, test_submit_form]) if __name__ == '__main__': unittest.TextTestRunner(verbosity=2).run(test_suite)
验证函数返回值的用法
如果业务函数有返回值,你可以包装一个测试函数来调用它并添加断言:
import unittest # 有返回值的已有函数 def existingFunctionToLoadWebPage(): # 模拟返回加载结果 return "加载成功" # 自定义测试逻辑的函数 def verify_load_page(): result = existingFunctionToLoadWebPage() assert result == "加载成功", "网页加载失败" # 包装为测试用例 test_load_page = unittest.FunctionTestCase(verify_load_page) if __name__ == '__main__': unittest.main()
内容的提问来源于stack exchange,提问作者hal9kaye
相关产品推荐
相关产品推荐

