使用Python 2.6,我在目录中的python文件中进行了非常简单的测试:
#mytest.py import unittest class BasicTests(unittest.TestCase): def test_ok(self): self.assertTrue(True) suite = unittest.TestLoader().loadTestsFromTestCase(BasicTests)
我进入目录并运行,python -m unittest mytest.suite并出现以下错误:
python -m unittest mytest.suite
Traceback (most recent call last): File "/usr/lib/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/lib/python2.6/unittest.py", line 875, in <module> main(module=None) File "/usr/lib/python2.6/unittest.py", line 816, in __init__ self.parseArgs(argv) File "/usr/lib/python2.6/unittest.py", line 843, in parseArgs self.createTests() File "/usr/lib/python2.6/unittest.py", line 849, in createTests self.module) File "/usr/lib/python2.6/unittest.py", line 613, in loadTestsFromNames suites = [self.loadTestsFromName(name, module) for name in names] File "/usr/lib/python2.6/unittest.py", line 598, in loadTestsFromName test = obj() File "/usr/lib/python2.6/unittest.py", line 464, in __call__ return self.run(*args, **kwds) TypeError: run() takes exactly 2 arguments (1 given)
我尝试了几种变体(例如unittest.makeSuite和unittest.LoadTestFromNames),但它们都给了我相同的基本错误。我想念什么?我一直在阅读文档,并且似乎遵循规范。
unittest.makeSuite
unittest.LoadTestFromNames
我通常不使用unittest命令行,但是有自己的测试运行脚本。
unittest
您需要向suite模块添加功能
suite
def suite(): return unittest.TestLoader().loadTestsFromTestCase(BasicTests)
然后称它为python -m unittest mytest.suite。但是后来我遇到了以下问题:
TypeError: calling <function suite at 0x00C1FB70> returned <unittest.TestSuite tests=[<mysite.BasicTests testMethod=test_ok>]>, not a test
发生这种情况是因为unittest使用了类似的东西,isinstance(mytest.suite(), TestSuite)但是通过执行-m,您得到了TestSuite该类的两个不同版本(一个是__main__.TestSuite,另一个是unittest.TestSuite),因此isinstance返回false。 对我来说,这似乎是一个错误。unittest.py通过from unittest import TestSuite, TestCase在开始时插入进行修补即可loadTestsFromName解决isinstance问题。抱歉,我不能给您“ 正确的 ”解决方案(如果有)。
isinstance(mytest.suite(), TestSuite)
-m
TestSuite
__main__.TestSuite
unittest.TestSuite
isinstance
unittest.py
from unittest import TestSuite, TestCase
loadTestsFromName