2017-03-10 7 views
3

にテストを置くときに私はPythonパッケージの非常に基本的な例を持っていると私はpytestpytestは、私は別のディレクトリ

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

__init__.pyで実行しようとしているテストは、spam.py定義空のパッケージを見つけることができません単機能func()spam_test.pyは次のとおりです。私はpy.testを実行し、そのすべての作品ルートディレクトリに

import package.spam 

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

、1通のテストを返します。

私には私もこの方法で物事を構造化することができるとを考えた:

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

運がない。私は何を間違えているのですか?

+0

私はいくつかの簡単なテストの作業に問題があったのですが、それらは 'test_foo' 'foo_test'はファイル名と違い... –

答えて

4

さて、私はそれを働かせました。空の__init__.pyファイルをtestsディレクトリに追加します。

これはなぜ機能しますか? official docsから:

basedirを決定する:これは__init__.pyを含有しない第一の「上方」(ルートに向かって)ディレクトリです。 __init__.pyを含むtestsないとそう

、pytestはそれがbasedirことを決定。 __init__.pyを追加すると、pytestがルートまで再帰的に強制されます。どこからでも必要なものをインポートできます。

+0

これを行うには本当に推奨される方法ですか?それとも単なる副作用ですか? –

関連する問題