使用unittest时if __name__ == '__main__'运行触发AttributeError求助
解决unittest中的AttributeError和Empty test suite问题
我来帮你排查这个问题!从报错信息和你的代码来看,问题出在导入方式以及和PyCharm的TeamCity测试运行器的兼容性上,具体原因和解决方案如下:
问题根源
你使用了from unittest import *这种通配符导入方式,在Python 3.7.0b4这个beta版本中,这种导入可能会和PyCharm的TeamCity测试插件产生冲突——导致测试用例的内部属性_testFunc被错误识别为字符串类型,从而触发'str' object has no attribute '__name__'的错误。同时,这种导入方式也可能让main()函数无法正确扫描到你的测试类,出现Empty test suite的提示。
另外补充一点:虽然你用assert True能运行,但更推荐使用unittest框架自带的断言方法(比如self.assertTrue()),这能更好地和测试框架集成,生成更准确的测试报告。
修复后的代码
把代码改成下面的任意一种形式都可以解决问题:
方案1:导入整个unittest模块(推荐)
import unittest class TestSomething(unittest.TestCase): def test_thing(self): self.assertTrue(True) # 使用框架自带的断言方法 if __name__ == '__main__': unittest.main()
方案2:明确导入需要的组件
如果你不想导入整个模块,可以明确导入TestCase和main:
from unittest import TestCase, main class TestSomething(TestCase): def test_thing(self): self.assertTrue(True) if __name__ == '__main__': main()
验证方法
运行修改后的代码,应该能正常执行测试,不会再出现AttributeError和Empty test suite的问题。如果还是有问题,可以尝试在PyCharm中暂时关闭TeamCity测试集成,或者升级到Python 3.7的正式版本(beta版本本身可能存在一些兼容性问题)。
内容的提问来源于stack exchange,提问作者Mykola Zomchak
相关产品推荐
相关产品推荐

