【问题标题】:unittest fails on import--missing symbolsunittest 在导入时失败——缺少符号
【发布时间】:2014-12-12 22:50:55
【问题描述】:

我是 Python、Python 命令行和 PyDev 的新手。 Fedora 20,Python 2.7.5,因为它出现在这个发行版上。我无法编写单元测试。已尝试导入 unittest 和 unittest2(如此处)。

from unittest2 import TestCase, main

def IsOdd( n ):
    return n % 2 == 1

class IsOddTests( TestCase ):
    def testOne( self ):
        self.failUnless( IsOdd( 1 ) )
    def testTwo( self ):
        self.failIf( IsOdd( 2 ) )

def main():
    main()

if __name__ == '__main__':
    main()

每次导入都有其问题。无论是从 Eclipse 中的 PyDev 控制台还是在命令行 shell 都会发生这种情况。我查看了 /usr/lib/python2.7/site-packages/* 下的内容,发现缺少的符号(TestCase 和 unit),但这对当前案例没有帮助。

/usr/bin/python 2.7.5 (default, Nov  3 2014, 14:26:24) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-7)]
PyDev console: starting.
>>> from unittest2 import TestCase, main
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/unittest2/__init__.py", line 40, in <module>
    from unittest2.collector import collector
  File "/usr/lib/python2.7/site-packages/unittest2/collector.py", line 3, in <module>
    from unittest2.loader import defaultTestLoader
  File "/usr/lib/python2.7/site-packages/unittest2/loader.py", line 8, in <module>
    import unittest
  File "/home/russ/dev/python-workspace/max/src/unittest.py", line 11, in <module>
    from unittest2 import TestCase, main
  File "/usr/lib/python2.7/site-packages/unittest2/main.py", line 7, in <module>
    from unittest2 import loader, runner
  File "/usr/lib/python2.7/site-packages/unittest2/runner.py", line 7, in <module>
    from unittest2 import result
  File "/usr/lib/python2.7/site-packages/unittest2/result.py", line 26, in <module>
    class TestResult(unittest.TestResult):
AttributeError: 'module' object has no attribute 'TestResult'
>>> from unittest import TestCase, main
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/russ/dev/python-workspace/max/src/unittest.py", line 11, in <module>
    from unittest2 import TestCase, main
  File "/usr/lib/python2.7/site-packages/unittest2/__init__.py", line 40, in <module>
    from unittest2.collector import collector
  File "/usr/lib/python2.7/site-packages/unittest2/collector.py", line 3, in <module>
    from unittest2.loader import defaultTestLoader
  File "/usr/lib/python2.7/site-packages/unittest2/loader.py", line 12, in <module>
    from unittest2 import case, suite
  File "/usr/lib/python2.7/site-packages/unittest2/case.py", line 10, in <module>
    from unittest2 import result
  File "/usr/lib/python2.7/site-packages/unittest2/result.py", line 9, in <module>
    from unittest2 import util
ImportError: cannot import name util

【问题讨论】:

  • 如果您是 python 新手,请尽可能使用 python 3。 unittest2 python 3 中的unittest 包。
  • 谢谢,不过,我的工作必须在 python 2 中。

标签: python pydev


【解决方案1】:

我从未使用过 unittest2。鉴于它是一个内置的 python 并且经过严格审查,似乎使用普通的 unittest 可能会更好一些。我能够让它为我工作

from unittest import TestCase, main as unittest_main

def IsOdd( n ):
    return n % 2 == 1

class IsOddTests( TestCase ):
    def testOne( self ):
        self.failUnless( IsOdd( 1 ) )
    def testTwo( self ):
        self.failIf( IsOdd( 2 ) )

def main():
    unittest_main()

if __name__ == '__main__':
    main()

然后运行它

0 ✓ greg@MinasArnor ~/workspace $ python test.py 
..
----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK

【讨论】:

  • 不幸的是,我仍然得到:(以结尾的整个跟踪)AttributeError:'module'对象没有属性'TestResult'
  • 那么听起来你的python环境有问题而不是unittest
  • 这就是我在家里的 Mint 17 主机上的工作;在我工作时,它仍然无法在 Fedora 20 上运行。
  • 我从我的 Fedora 20 主机上彻底清除了 Eclipse 和相关的子目录,但这些都不起作用。我从头开始为 Java EE 开发人员重新安装了 Luna IDE,包括 PyDev 并重新编写了这个示例(称为 demo.py)并且它工作正常。
【解决方案2】:

我在你的回溯中注意到了这一点:

File "/home/russ/dev/python-workspace/max/src/unittest.py", line 11, in <module>

还有这个:

class TestResult(unittest.TestResult):
AttributeError: 'module' object has no attribute 'TestResult'

重命名您的文件。您已将脚本命名为 unittest.py,因此 Python 正在查看 您的 单元测试脚本以用于类(如 TestResult),而不是像预期的那样查看内置单元测试模块。

【讨论】:

  • 我正在关注在线教程。这不是我的代码。尽管如此,这里的代码仍然在 PyDev 和命令行中出错,最终出现 AttributeError: 'module' object has not attribute 'TestResult'
  • 嗯,奇怪。这可能是一个依赖问题,也许尝试重新安装 unittest2,如果失败,然后尝试重新安装,但使用 --verbose 标志。
  • 好的,我知道你的问题。将您的文件重命名为 unittest.py 以外的其他名称,我认为这可以解决您的所有问题。
  • 是的,我现在选择 demo.py。它仍然无法在新安装 Eclipse Luna 和 PyDev 的 Fedora 20 上运行。我一定是不小心弄坏了东西。
猜你喜欢
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多