能否在单个文件中运行两个带有不同补丁的Python单元测试?
能否在单个文件中运行两个带有不同补丁的Python单元测试?
当然可以!你的代码本身其实是能正常运行这两个测试的,可能你只是没注意到运行结果的细节~
先给你拆解下情况:
- 你写的两个测试类
TestInputEmployeeData和TestOutputErrorMessage都完全符合unittest的规范(类名以Test开头,测试方法以test_开头),当你执行unittest.main()时,unittest框架会自动扫描并运行所有符合要求的测试方法。 - 你觉得只有第一个测试运行,大概率是没仔细看控制台输出。正常运行后,你应该会看到类似这样的结果:
这里的两个点.. ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK..就代表两个测试都成功执行并通过了。如果想更直观地看到每个测试的运行状态,可以给unittest.main()加上verbosity=2参数,这样会输出每个测试的详细信息:
运行后会显示:if __name__ == '__main__': unittest.main(verbosity=2)
这样就能明确看到两个测试都跑起来了。test_get_user_details (__main__.TestInputEmployeeData) ... ok test_output_error_message (__main__.TestOutputErrorMessage) ... ok ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
再说说你提到的「把两个测试放在同一个类里报错」的问题——其实这也是完全可行的,每个测试方法的补丁是独立隔离的,不会互相影响。比如你可以把两个测试方法合并到同一个类里:
class TestIOOperations(unittest.TestCase): @patch('builtins.input', side_effect=['Alice', 'Baker']) def test_get_user_details(self,mock_input): expected_output = {'firstName': 'Alice', 'lastName': 'Baker'} result = IO.input_employee_data() self.assertEqual(result, expected_output) @patch('builtins.print') def test_output_error_message(self,mock_print): IO.output_error_messages('Invalid input.') mock_print.assert_called_once_with('Invalid input.')
如果当时报错,大概率是你合并时的代码写法出了问题(比如补丁装饰器写错、或者IO模块的函数本身有冲突),和「同一个类里放不同补丁的测试」本身无关。
总结下:不管是把测试分成多个类,还是放在同一个类里,只要符合unittest的规范,带不同补丁的测试都能在单个文件里正常运行。
备注:内容来源于stack exchange,提问作者user1079785
相关产品推荐
相关产品推荐

