我正在使用带有python2.7的窗口。我的程序很简单。通过命令行输入并检查它是否为“5”。
代码:
import unittest
import sys
a=sys.argv[1]
print a
class TestCase(unittest.TestCase):
"""My tests"""
def test_is_number_is_five(self):
self.assertEqual('5',a)
if __name__ == '__main__':
unittest.main()
使用以下方式运行:
>>python test.py 5
我收到此错误:
Traceback (most recent call last):
File "C:\Python27\lib\unittest\main.py", line 94, in __init__
self.parseArgs(argv)
File "C:\Python27\lib\unittest\main.py", line 149, in parseArgs
self.createTests()
File "C:\Python27\lib\unittest\main.py", line 158, in createTests
self.module)
File "C:\Python27\lib\unittest\loader.py", line 130, in loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
File "C:\Python27\lib\unittest\loader.py", line 100, in loadTestsFromName
parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute '5'
答案 0 :(得分:3)
unittest.main()
将获取从命令行运行的测试列表。因此,它试图在您的模块中找到一个名为5
的测试,但它失败了,因为没有这样的测试。
要解决此问题,您可以将自己的argv
值传递给unittest.main()
:
if __name__ == '__main__':
unittest.main(argv=sys.argv[:1])
这只传递第一个参数,即脚本文件名。但是,如果您想在命令行上传递测试名称,它会破坏unittest.main()
的某些功能。