python unittest的奇怪问题

时间:2012-10-04 19:16:19

标签: python unit-testing

以下超级简单单元测试在python2.7下运行正常,但出现以下错误 “2.6中没有方法runTest()”,为什么会这样?

谢谢! 阳

myuser@myhost /tmp $ python26 -m unittest a.AA
Traceback (most recent call last):
  File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
    exec code in run_globals
  File "/usr/lib64/python2.6/unittest.py", line 874, in <module>
    main(module=None)
  File "/usr/lib64/python2.6/unittest.py", line 815, in __init__
    self.parseArgs(argv)
  File "/usr/lib64/python2.6/unittest.py", line 842, in parseArgs
    self.createTests()
  File "/usr/lib64/python2.6/unittest.py", line 848, in createTests
    self.module)
  File "/usr/lib64/python2.6/unittest.py", line 612, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "/usr/lib64/python2.6/unittest.py", line 597, in loadTestsFromName
    test = obj()
  File "/usr/lib64/python2.6/unittest.py", line 215, in __init__
    (self.__class__, methodName)
ValueError: no such test method in <class 'a.AA'>: runTest
myuser@myhost /tmp $ vi a.py
myuser@myhost /tmp $ cat a.py
import unittest

class AA(unittest.TestCase):
    pass

2 个答案:

答案 0 :(得分:0)

您必须在班级中覆盖runTest功能。

或者名为test_something的函数,unittest将其理解为测试函数。当你想要执行相当数量的测试时,这很有用,因为你可以提供setUp和tearDown,它们是在每次测试之前调用的函数,用于创建测试中所需的类或东西。

答案 1 :(得分:0)

它在2.7而非2.6中工作的原因是in the documentation

它说

  

在2.7版本中更改:在早期版本中,只能运行单独的测试方法,而不能运行模块或类。

您正在尝试在整个班级AA中运行所有测试。你不能在2.6中这样做。您可以在代码底部拨打unittest.main(),然后通过python a.py从命令行运行脚本。

$ cat a.py
import unittest

class AA(unittest.TestCase):
    def test_something(self):
        self.assertEqual(1, 1)

unittest.main()

$ python -V
Python 2.6.1
$ python a.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

您可能还希望保护对unittest.main()的调用,以确保仅在从命令行运行此文件时才调用它。