繁体   English   中英

使用python的unittest模块的未绑定错误

[英]Unbound error using python's unittest module

我想要一个单独的类来运行所有测试,然后从main调用该类以显示结果。 不幸的是,我收到这样的错误:

Traceback (most recent call last):
  File "/home/dhatt/workspace/pyqt_DALA_ServiceTracker/src/Main.py", line 21, in <module>
    allsuite = unittest.TestLoader.loadTestsFromModule(TestAllSuite)
TypeError: unbound method loadTestsFromModule() must be called with TestLoader instance as first argument (got type instance instead)

如何更改代码以便可以运行测试?

我正在使用python 2.6.5。

如果您发现我的测试结构本身也存在问题(main调用main测试类,然后又调用所有其他测试类),请告诉我。 我愿意提出更好的测试代码布局建议(互联网上的示例仅在使用unittest时为您提供了非常基础的内容)

这是我来自TestAllClass的代码(它正在调用其他测试类)

import unittest
from TestSettings import TestSettings
from TestConnectDB import TestConnectDB


class TestAllSuite(unittest.TestCase):

    def testsuite(self):
        suite_settings = TestSettings.suite()
        suite_connectDB = TestConnectDB.suite()
        alltests = unittest.TestSuite([suite_settings, suite_connectDB])
        return alltests

这是我主叫TestAllClass的一部分

if __name__ == '__main__':
    allsuite = unittest.TestLoader.loadTestsFromModule(TestAllSuite)
    unittest.TextTestRunner(verbosity=2).run(allsuite)

这是我的一个测试类的示例(如果有帮助的话):

from Settings import Settings
import unittest


class TestSettings(unittest.TestCase):
    def suite(self):
        suite = unittest.TestSuite()
        tests = ['test_confirm_ip', 'test_valid_conn','test_correct_location']
        return unittest.TestSuite(map(suite, tests))

    def setUp(self):
        self._test_settings = Settings('/home/dhatt/ServiceTrackerSettings.ini')
        self.ip_add, self.conn, self.digby =    self._test_settings._get_config_variables()

    def tearDown(self):
        self._test_settings = None
        self.ip_add = None
        self.conn = None
        self.digby = None

    def test_confirm_ip(self):
        self.assertEqual((str(self.ip_add)), ('142.176.195.250'))

    def test _confirm_conn(self):
        self.assertEqual((str(self.conn)), ('conn1'))

    def test_confirm_location(self):
        self.assertEqual((self.digby), (True))

loadTestsFromModule的参数(在您的情况下为TestAllSuite )应该是一个模块,而不是unittest.TestCase的子类:

allsuite = unittest.TestLoader.loadTestsFromModule(TestAllSuite)

例如,这是一个小脚本,它运行所有形式为test_*.py文件中的单元测试:

import unittest
import sys
import os

__usage__='''
%prog      # Searches CWD
%prog DIR   
'''

if __name__=='__main__':
    if len(sys.argv)>1:
        unit_dir=sys.argv[1]
    else:
        unit_dir='.'
    test_modules=[filename.replace('.py','') for filename in os.listdir(unit_dir)
                  if filename.endswith('.py') and filename.startswith('test_')]
    map(__import__,test_modules)

    suite = unittest.TestSuite()
    for mod in [sys.modules[modname] for modname in test_modules]:
        suite.addTest(unittest.TestLoader().loadTestsFromModule(mod))
    unittest.TextTestRunner(verbosity=2).run(suite)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM