2016-06-14 2 views
0

私が欲しい次のプロジェクト構造を作成する方法:pytestは:専用のテストディレクトリ

|--test_pytest/ 
| |--tests/ 
| | |--test_sum.py 
| |--t_pytest/ 
| | |--sum.py 
| | |--__init__.py 

sum.py:

def my_sum(a, b): 
    return a + b 

test_sum.py

|--folder/ 
| |--tests/ 
| |--project/ 

は、簡単な例を書くことができます:

from t_pytest.sum import my_sum 
def test_my_sum(): 
    assert my_sum(2, 2) == 5, "math still works" 

のは、それを実行してみましょう:

test_pytest$ py.test ./ 
========== test session starts =========== 
platform linux -- Python 3.4.3, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 
rootdir: /home/step/test_pytest, inifile: 
collected 0 items/1 errors 

================= ERRORS ================= 
___ ERROR collecting tests/test_sum.py ___ 
tests/test_sum.py:1: in <module> 
    from t_pytest import my_sum 
E ImportError: No module named 't_pytest' 
======== 1 error in 0.01 seconds ========= 

それはt_pytestモジュールを参照してくださいすることはできません。 httpieのように作られました
https://github.com/jkbrzt/httpie/ https://github.com/jkbrzt/httpie/blob/master/tests/test_errors.py
なぜですか?どうすれば修正できますか?

+0

't_pytest'はインストールされているか、インポートパスにありますか? – jonrsharpe

+0

'import t_pytest' work *は一般的に*ですか?もしそうでなければ、テストのためにうまくいかないのです。 – jonrsharpe

+0

私はそうだと思います。インポートパスではどういう意味ですか? sys.patchのt_pytest? – stepuncius

答えて

0

フォルダテストで__init__.pyファイルを追加することで、テストをモジュールにすることもできます。最も人気のあるPythonのlibリクエストの1つであるhttps://github.com/kennethreitz/requestsは、ユニットテストのフォルダテストでこのようにしています。テストを実行するためにPYTHONPATHをプロジェクトにエクスポートする必要はありません。

あなたのサンプルプロジェクトでは、ディレクトリ 'test_pytest'でpy.testコマンドを実行する必要があります。

さらにもう1つ、サンプルコードのインポート行が間違っています。それはでなければならない

from t_pytest.sum import my_sum 
+0

ありがとう、私はその間違いを訂正しました。 – stepuncius

0

ありがとう、jonrsharpe。 Py.testには魔法はありません。パッケージをインポート可能にする必要があります。

$ export PYTHONPATH="${PYTHONPATH}: [Path to folder with my module]" 

(PYTHONPATHがのsys.pathのパス源の一つである)
私は永久にこの変更を加える必要がある場合は、私は~/.bashrc

+1

より洗練された方法は、[virtualenv](https://virtualenv.pypa.io/)をセットアップし、pytestとあなたのパッケージ( 'pip install -e .')の両方をインストールすることです。 –

-1

にこの文字列を追加する必要があります。可能な解決策の一つがありますpytestで:

if __name__ == '__main__': 
    import pytest 
    pytest.main(['-x', 'tests', '--capture', 'sys']) 

# Note: tests is the directory name 

これは、unittestのに問題を解決するための役に立つかもしれません:

たちはrun_tests.pyrun_tests.py

コードと呼ばスタータースクリプトがあるとします。あなたは自分のトップレベルのターゲットディレクトリ(絶対パス)に./testsを交換

​​

をすべてテストスクリプトが含まれてい

あなただけのこのファイルを次のように実行してください

python run_tests.py

すべてのテストスクリプトの実行を確認することができます。

+0

質問はpy.testについてでした、これはunittest.pyです; –

+0

もpytestで更新されました:) – Nava

関連する問題