- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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
就能识别src
和 test
(或 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/
当我将它加载到 Jenkins 中时,我首先注意到了这个项目的问题。更令人费解的是,我已经能够按如下方式重现它: 在项目的原始版本中,以下命令按预期运行测试: .venv/bin/python set
.noserc [nosetests] with-xunit 使用以下命令运行 Nose 测试 nosetests -w ./test/unit_test 当我使用nosetests 运行测试时,它不
嗨,所以我想知道是否有办法修复nosetests断言失败的输出。我有一个名为“t.py”的简单脚本: import unittest from nose.tools import assert_equ
我有一些功能: def reverse_number(num): try: return int(num) except ValueError: ret
我正在使用 Jenkins 设置一个 Python 持续集成服务器,nosetests 不断运行相同的测试两次。我不会在任何地方导入测试。这是我正在运行的命令: nosetests --with-xc
我正在尝试为随机输入数字游戏编写一些测试,但不太确定如何继续。 我正在关注来自 http://inventwithpython.com/chapter4.html 的 Python 游戏 使用文件 t
我正在(我必须)在 python 中动态创建测试以与 nosetests 一起运行,如下所示: def my_verification_method(param): """ descripti
我尝试用 Nose 测试但是当我运行下面的测试用例时 import unittest class TestSuite(unittest.TestCase): b = [] def se
使用 nose 1.3.7 和命令行选项后的文档列表 --xunit-prefix-with-testsuite-name Whether to prefix the class name under
NoseTests 的文档看起来非常简单,但我无法在任何地方找到初始设置的答案。我已经完成 pip install nosetests 并且一切顺利,但是当我在我的 django 项目的根目录下键入“
我正在尝试使用 nosetests 在这样的目录结构中运行我的测试 src - file1.py - ... test - helper.py - test_file1
我正在尝试编写一个包含生成器的测试类,并使用 nosetests 运行测试。但是,我对 nosetests 测试运行器似乎隔离测试类中的方法的方式感到困惑,因此它们不共享相同的 self: class
我正在使用 pycharm 并尝试运行单独的测试。我的“运行所有测试有效(使用 py.test),但我想运行特定测试。当我尝试运行 Nosetest 时,我收到此错误: django.core.exc
我编写的 Nose 单元测试相当完整,但结果是它们可能需要一段时间才能运行。我希望能够传递一个可选的命令行参数来运行一些快速版本的测试(例如,尝试一些可能的输入,而不是每个可能的输入)。 理想情况下,
对于我的代码导入的第 3 方模块,我从 nosetest 收到弃用警告。 有人知道如何消除这些警告吗? 我知道以下标志适用于同一代码的任意 python 运行: python -W ignore::
过去两天我一直在网上搜索,试图了解我在使用 WebTest 时遇到的问题。但是,我并不高兴,想知道这里是否有人可以提供帮助。 我正在使用 nose 在我正在开发的 Web 应用程序上运行测试,但似乎在
我是通过“艰难地学习 Python”来学习 Python 的,但我被困在了练习 46 ( http://learnpythonthehardway.org/book/ex46.html )。 我安装了
我试图将 nosetests 限制到特定目录,但是在测试运行期间,它包括我目标目录的父目录,这样做会引发错误。 以下是测试运行输出的关键元素: nose.importer: DEBUG: Add pa
我可以使用 nosetests 在 workflow 文件夹中运行测试: workflow maks$ nosetests .......... ---------------------------
我正在为用 python 编写的 Web 应用程序进行测试。 假设我的 test_login.py 模块中有 5 个测试。 每个测试都是一个类。 通常有一个扩展 TestFlow 类的基础测试,这是我
我是一名优秀的程序员,十分优秀!