2017-04-21 11 views
0

py.testで親スクリプトを実行しないでテストを実行するにはどうすればよいですか?現在、ディレクトリProject_dirからコマンドpytest -vを実行していますが、script.pyが実行され、最終的にテストが終了します。理想的には、テストのみを実行する必要があります。ここに私の現在のディレクトリのセットアップです:親スクリプトを実行しないでpytestを使用してテストを実行

Project_dir 
    script.py 
    test 
     test_script.py 

script.py

def add(a,b): 
    added = a + b 
    return added 

x = add(1,3) 
print x, 'yup' 

test_script.py

import script 

def test_add(): 
    assert script.add(3,4) == 7 

作業ディレクトリ: Project_dir

コマンド:

========================================== test session starts ========================================== 
platform darwin -- Python 2.7.10, pytest-3.0.7, py-1.4.33, pluggy-0.4.0 -- /usr/bin/python 
cachedir: .cache 
rootdir: **, inifile: 
plugins: cov-2.4.0 
collecting 0 items 
Sum is 4 
collected 1 items 

test/test_script.py::test_add PASSED 

======================================= 1 passed in 0.00 seconds ======================================== 

Sum is 4 -vs pytestではなく、単にテストを完全に実行script.pyを示しています。これは、script.pyがモジュールとしてインポートされるために発生します。しかし、私はこれを避け、テストを直接実行する方法がなければならないと考え続けています。

答えて

2

は、その中のすべてのトップレベルのコードを実行します。

コードをif __name__ == '__main__':に入れておく必要があります。スクリプトを実行するときにのみ実行されます(インポートするときは実行されません)。詳細はthis answerをご覧ください。

0

Ignore paths during test collection

pytest -v --ignore=script.py 

またはディレクトリ上pytestを実行しよう:

pytest -v test/ 

pytest test/の実行についてSpecifying tests/selecting tests

+0

動作しませんでした。それでも同じように動作します。ありがとう! – JeeYem

+0

ディレクトリでpytestを実行できます –

+0

メインスクリプトを実行します。 'pytest -v'が' pytest -v test/'と違うのかどうかはわかりません。ちょうど明らかになるように、メインスクリプトは、テストスクリプトのモジュールとしてインポートされたときに実行されます。 – JeeYem

0

方法を参照してください? ちょうどそれを明確にする:Pythonでモジュールをインポートする https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests

pytest somepath  # run all tests below somepath 
+0

私の例では 'pytest test_script.py'を意味していますか? pytestは同じことをするために発見ルールを使うので、 'pytest -v'とは違います(冗長ではありません)。 – JeeYem

+0

だから、実行せずにスクリプトの動作をテストしたいのですか?どのようにそれをテストしますか? :)可能であれば、 'test_script.py'と' scripts.py'を見せてください。 – marcinowski

+0

可能かどうかわかりません。今の例を追加しました。ありがとう! – JeeYem

関連する問題