Python中函数内定义unittest类运行时显示0测试用例如何修复
问题原因
- unittest默认的测试用例发现机制只会扫描当前模块全局作用域下继承自
unittest.TestCase的子类,你的SimpleTest是定义在smg函数内部的局部类,不会被默认加载器识别到,所以找不到测试用例。 if __name__ == '__main__'判断和unittest.main()调用的位置错误,你把这部分逻辑写在了SimpleTest类的内部,而不是模块的顶层位置,也会导致测试执行逻辑无法按预期触发。
修复方案
方案1:调整代码结构到全局作用域(推荐)
把测试类、主执行逻辑移到模块顶层,调整后代码如下:
import unittest def add(x, y): return x + y class SimpleTest(unittest.TestCase): def testadd1(self): self.assertEquals(add(4, 5), 9) if __name__ == '__main__': unittest.main()
方案2:保留函数内定义的结构,手动加载测试用例
如果确实需要把测试逻辑封装在函数内部,可以手动构造测试套件执行,不需要依赖默认的用例发现机制,调整后代码如下:
import unittest def smg(): def add(x, y): return x + y class SimpleTest(unittest.TestCase): def testadd1(self): self.assertEquals(add(4, 5), 9) # 手动构造测试套件并执行 suite = unittest.TestLoader().loadTestsFromTestCase(SimpleTest) unittest.TextTestRunner().run(suite) if __name__ == '__main__': smg()
两种方案执行后都可以正常识别到1条测试用例并运行。
内容的提问来源于stack exchange,提问作者user11578023
相关产品推荐
相关产品推荐

