pytest cannot find package when I put tests in a separate directory

余生长醉 提交于 2019-12-08 16:31:21

问题


I have a very basic example of a Python package and a test which I'm trying to run with pytest

package
 \--
   __init__.py
   spam.py
   spam_test.py

__init__.py is empty, spam.py defines a single function func() and spam_test.py is:

import package.spam

def test_func():
    assert(package.spam.func() == 5)

In the root directory I run py.test and it all works, returning one passing test.

I thought that I could also structure things in this way:

package
 \--
   __init__.py
   spam.py
tests
 \--
   spam_test.py

But now when I run py.test in the root I get:

============================= 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 ===========================

I've tried various things to no luck. What am I doing wrong??


回答1:


Well, I got it working. Add an empty __init__.py file in the tests directory.

Why does this work? From the official docs:

determine basedir: this is the first “upward” (towards the root) directory not containing an __init__.py.

So with tests not containing __init__.py, pytest determines that to be the basedir. Adding __init__.py forces pytest to recurse up to the root, from whence it can import what it needs to...



来源:https://stackoverflow.com/questions/42724305/pytest-cannot-find-package-when-i-put-tests-in-a-separate-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!