代码之家  ›  专栏  ›  技术社区  ›  Jingguo Yao

Python unittest.TestCase对象没有属性“runTest”

  •  38
  • Jingguo Yao  · 技术社区  · 11 年前

    对于以下代码:

    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'
    

    但是 unittest.main() 作品

    4 回复  |  直到 5 年前
        1
  •  47
  •   Janne Karila    5 年前

    您需要调用 TestLoader :

    if __name__ == "__main__":
        suite = unittest.defaultTestLoader.loadTestsFromTestCase(Test)
        unittest.TextTestRunner().run(suite)
    
        2
  •  15
  •   falsetru    11 年前

    您必须指定测试方法名称( test1 ):

    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)
    

    或者,如果您想运行文件中的所有测试,只需调用 unittest.main() 足够了:

    if __name__ == "__main__":
        unittest.main()
    
        3
  •  -1
  •   Sajjan Singh    11 年前

    任何情况下的实际测试 TestCase 子类是在 runTest() 方法只需将代码更改为:

    class Test(unittest.TestCase):
        def runTest(self):
            assert(True == True)
    
        4
  •  -1
  •   Kent Tong    4 年前

    您可以这样运行它:

    python -m unittest <your-module-name>
    

    我不完全理解为什么它有效。