我是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
答案 0 :(得分:2)
对问题here有一个很好的解释。
长话短说,当您尝试在脚本中使用相对导入时(而不是在模块中),会遇到麻烦。快速解决方案是在运行测试脚本时使用-m
参数。
python -m tests\test_basic.py
如果这不起作用,您可以尝试使用绝对导入。上面的链接将提供更多详细信息。