Python 2.6 : proper usage of unittest. 测试套件

标签 python unit-testing

使用 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,我收到以下错误:

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.makeSuiteunittest.LoadTestFromNames),但它们都给我相同的基本错误。我错过了什么?我保留 reading the documentation我似乎在遵循规范。

最佳答案

我通常不在命令行上使用 unittest,但有自己的测试运行脚本。

您需要向模块添加一个函数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 返回错误。
对我来说,这看起来像是一个错误。通过在 loadTestsFromName 开头插入 from unittest import TestSuite, TestCase 来修补 unittest.py 解决了 isinstance 问题。抱歉,我无法为您提供“正确的”解决方案(如果有的话)。

关于Python 2.6 : proper usage of unittest. 测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136159/

相关文章:

c# - WPF 应用程序的单元测试失败,出现 NotSupportedException "The Uri prefix is not recognized"

c++ - 期望在模拟对象上调用某些方法。它会破坏封装吗?

python - 在 Django 的 OrderedDict 中使用字典

java - 在 Java 中命名重载的单元测试方法

c# - 使类可测试

c# - 单元测试作业组件 C#

python - 如何将sql查询读取到pandas dataframe/python/django

java - 警告 TaskSetManager : Lost Task xxx: java. lang.ArrayIndexOutOfBoundsException: 1 - Scala

python - SQL:更新 A,其中 B 是 C 和 D 的每个唯一组合的最大值,其中 D 是连接表的元素

python - 在Python中的其他列列表中选择具有列值的行