gpt4 book ai didi

python - Nosetests 导入错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:35 26 4
gpt4 key购买 nike

我正在尝试使用 nosetests 在这样的目录结构中运行我的测试

src
- file1.py
- ...
test
- helper.py
- test_file1.py

可以看到,test_file1.py有一些测试file1.py的函数,所以它导入file1.py是这样的:

# In file1.py
import file1
import helper

# Tests go here...

我还使用了一个 helper.py 文件,它内置了一些简洁的功能,这样我就可以更轻松地创建测试。此功能是通过在我的实际代码中扩展几个类并覆盖一些方法来实现的。所以 helper.py 看起来像这样:

# In helper.py 
import file1

# Use stuff in file1.py

我无法理解 nose 如何使用其自定义导入器导入这些东西。通过在 src 目录中运行 nosetest ../tests,我能够让我的测试文件导入 file1.py,但我目前收到类似于以下内容的错误:

File helper.py:
ImportError: cannot import name file1

nose 是如何进行导入的?有没有一种方法可以让我基本上将所有测试/src 文件集中在一起,这样它们就可以相互导入,而我将它们保存在单独的文件夹中?

最佳答案

看到您使用 nosetests ../tests 执行测试我假设它们是从 tests 执行的文件夹本身。因此,来自 src 的文件目录未添加到 sys.path ,因此出现错误。

要解决这个问题可以:

  • 从父目录运行测试 - nosetests就能识别srctest (或 tests )目录,并将它们添加到 sys.path 中在运行测试之前

  • 添加 src运行 nosetests 之前 PYTHONPATH 的目录路径 (export PYTHONPATH=../src; nosetests)

请注意,您也可以省略 nosetests 的最后一个参数,因为默认情况下它会从当前目录运行测试。否则,如果测试不在您启动的目录中 nosetests来自,您可以使用 --where=<path-to-tests> 定义其位置参数(或简称为 -w )。因此,例如,您可以从 src 执行测试目录,甚至不设置 PYTHONPATH(因为默认情况下当前目录将添加到 sys.path),如下所示:nosetests -w ../tests .


最后,尽管这本身就很值得怀疑,但是:组织 Python 源代码的最常见方法是让 python 文件和包直接从项目目录开始,并在“测试”子包中进行测试他们测试的包裹。因此,在您的情况下,它将是:

/file1.py
/test/helper.py
/test/test_file1.py

或更好:

/myproject/__init__.py
/myproject/file1.py
/myproject/test/__init__.py
/myproject/test/helper.py
/myproject/test/test_file1.py

(后者,前提是您还在测试源中使用了正确的导入,例如 from .. import file1)。

在这种情况下,只需使用 nosetests 从项目的根目录运行测试没有任何争论。

无论如何,nosetests足够灵活,可以使用任何结构 - 使用任何看起来更适合您和项目的结构。

有关项目结构的更多信息,请参阅 What is the best project structure for a Python application?

关于python - Nosetests 导入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com