Python unittest.TestCase对象没有属性';运行测试&x27;
对于以下代码:Python unittest.TestCase对象没有属性';运行测试&x27;,python,unit-testing,python-3.x,python-unittest,Python,Unit Testing,Python 3.x,Python Unittest,对于以下代码: import unittest class Test(unittest.TestCase): def test1(self): assert(True == True) if __name__ == "__main__": suite = unittest.TestSuite() suite.addTest(Test()) unittest.TextTestRunner().run(suite) 使用Python 3执行时,会
import unittest
class Test(unittest.TestCase):
def test1(self):
assert(True == True)
if __name__ == "__main__":
suite = unittest.TestSuite()
suite.addTest(Test())
unittest.TextTestRunner().run(suite)
使用Python 3执行时,会引发以下错误:
Traceback (most recent call last):
File "test.py", line 10, in <module>
unittest.TextTestRunner().run(suite)
File "/usr/lib/python3.2/unittest/runner.py", line 168, in run
test(result)
File "/usr/lib/python3.2/unittest/suite.py", line 67, in __call__
return self.run(*args, **kwds)
File "/usr/lib/python3.2/unittest/suite.py", line 105, in run
test(result)
File "/usr/lib/python3.2/unittest/case.py", line 477, in __call__
return self.run(*args, **kwds)
File "/usr/lib/python3.2/unittest/case.py", line 408, in run
testMethod = getattr(self, self._testMethodName)
AttributeError: 'Test' object has no attribute 'runTest'
回溯(最近一次呼叫最后一次):
文件“test.py”,第10行,在
unittest.TextTestRunner().run(套件)
文件“/usr/lib/python3.2/unittest/runner.py”,第168行,运行中
测试(结果)
文件“/usr/lib/python3.2/unittest/suite.py”,第67行,在调用中__
返回自运行(*args,**kwds)
文件“/usr/lib/python3.2/unittest/suite.py”,第105行,运行中
测试(结果)
文件“/usr/lib/python3.2/unittest/case.py”,第477行,在调用中__
返回自运行(*args,**kwds)
文件“/usr/lib/python3.2/unittest/case.py”,第408行,运行中
testMethod=getattr(self,self.\u testMethodName)
AttributeError:“Test”对象没有属性“runTest”
但是
unittest.main()
有效。任何TestCase
子类的实际测试都是在runTest()方法中执行的。只需将代码更改为:
class Test(unittest.TestCase):
def runTest(self):
assert(True == True)
您需要调用一个:
您必须指定测试方法名称(test1
):
您可以这样运行它:
python -m unittest <your-module-name>
python-m单元测试
但我不完全理解为什么它会起作用。是的,它会起作用。但是有没有一种方法可以让它在不改变测试类的情况下工作呢@bhajun-singh.只需说pass
而不是assert(True==True)
这似乎是另一种说法。也就是说:“TestCase的每个实例都将运行一个基本方法:名为methodName的方法。在TestCase的大多数使用中,您既不会更改methodName,也不会重新实现默认的runTest()方法。”
import unittest
class Test(unittest.TestCase):
def test1(self):
assert(True == True)
if __name__ == "__main__":
suite = unittest.TestSuite()
suite.addTest(Test('test1')) # <----------------
unittest.TextTestRunner().run(suite)
if __name__ == "__main__":
unittest.main()
python -m unittest <your-module-name>