用于启用单元测试的Python包结构('父模块未加载'错误)

时间:2016-03-01 23:28:21

标签: python unit-testing packaging

我是Python的新手,我正在努力获得正确的项目结构,以便我可以在其旁边创建一个包和一个单独的tests目录进行单元测试。

我已尝试按照http://docs.python-guide.org/en/latest/writing/structure/#sample-repository中描述的规范格式进行操作。不幸的是,即使在github上使用example,我也无法做到这一点:

python tests\test_basic.py
Traceback (most recent call last):
 File "tests\test_basic.py", line 3, in <module>
  from .context import sample
 SystemError: Parent module '' not loaded, cannot perform relative import

python -m unittest也无效:

ERROR: sample (unittest.loader._FailedTest)
ImportError: Failed to import test module: sample
Traceback (most recent call last):
  File "C:\ProgramData\chocolatey\lib\python3\tools\lib\unittest\loader.py", line 462, in _find_test_path
    package = self._get_module_from_name(name)
  File "C:\ProgramData\chocolatey\lib\python3\tools\lib\unittest\loader.py", line 369, in _get_module_from_name
    __import__(name)
  File "E:\source\python\samplemod\sample\__init__.py", line 1, in <module>
    from .core import hmm
  File "E:\source\python\samplemod\sample\core.py", line 9
    print get_hmm()
                ^
SyntaxError: invalid syntax

编辑:以下表明它正在运行测试但不是(通过使测试失败来验证)

> python setup.py test
running test

知道这里发生了什么吗?如果即使推荐的格式也不起作用,那么我又高又干......我在Windows上的python 3.5.1上

编辑:我发现如果我安装了鼻子(python -m pip install nose),那么我可以运行单元测试:

python -m nose

1 个答案:

答案 0 :(得分:2)

对问题here有一个很好的解释。

长话短说,当您尝试在脚本中使用相对导入时(而不是在模块中),会遇到麻烦。快速解决方案是在运行测试脚本时使用-m参数。

python -m tests\test_basic.py

如果这不起作用,您可以尝试使用绝对导入。上面的链接将提供更多详细信息。