我有一个非常基本的Python包示例和我正在尝试使用pytest运行的测试
package
\--
__init__.py
spam.py
spam_test.py
__init__.py
是空的,spam.py
定义了单个函数func()
和spam_test.py
是:
import package.spam
def test_func():
assert(package.spam.func() == 5)
在根目录中,我运行py.test
,一切正常,返回一个通过测试。
我以为我也可以用这种方式构建东西:
package
\--
__init__.py
spam.py
tests
\--
spam_test.py
但是现在当我在根中运行py.test
时,我得到:
============================= test session starts ============================= platform win32 -- Python 3.6.0, pytest-3.0.5, py-1.4.32, pluggy-0.4.0 rootdir: C:\Users\MattUser\Documents\m_drive\notebooks\testing, inifile: collected 0 items / 1 errors =================================== ERRORS ==================================== _____________________ ERROR collecting tests/spam_test.py _____________________ ImportError while importing test module 'C:\Users\MattUser\Documents\m_drive\not ebooks\testing\tests\spam_test.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: tests\spam_test.py:1: in import package.spam E ModuleNotFoundError: No module named 'package' !!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!! =========================== 1 error in 0.19 seconds ===========================
我尝试了各种各样的事情,没有运气。我究竟做错了什么??
好吧,我搞定了。在__init__.py
目录中添加一个空的tests
文件。
为什么这样做?来自official docs:
确定
basedir
:这是第一个“向上”(朝向根)目录,不包含__init__.py
。
所以tests
不包含__init__.py
,pytest确定是basedir
。添加__init__.py
强制pytest递归到根,从那里它可以导入它需要的...