2013-04-08 10 views
13

pyDevでpytestユニットテストを実行する際に問題が発生しました。私は、最後のテストの後に実行するモジュール共有フィクスチャとファイナライザでユニットテストを実行しようとします。 しかし、pyDevで単体テストを実行すると、同じインスタンスは使用されず、代わりに2つの異なるインスタンスが作成されます。この例は、コンソールやpydev内のスクリプトから起動したときに正常に動作しています。モジュール共有フィクスチャでpytestユニットテストを実行するPyDevが失敗する

私はプラットフォームPython 2.7.3、pytest-2.3.4、pyDev 2.7.3.2013031601、Eclipse 4.2 on Win7を使用しています。

私はhttp://pytest.org/latest/fixture.html

出力からPyDevはからの例を試してみましたが、次のとおりです。

============================= test session starts ============================== 
platform win32 -- Python 2.7.3 -- pytest-2.3.4 
__________________________________ test_ehlo ___________________________________ 
smtp = <smtplib.SMTP instance at 0x027F9080> 
__________________________________ test_noop ___________________________________ 
smtp = <smtplib.SMTP instance at 0x027FF3C8> 

コンソール出力は次のようになります。

============================= test session starts ============================== 
platform win32 -- Python 2.7.3 -- pytest-2.3.4 
__________________________________ test_ehlo ___________________________________ 
smtp = <smtplib.SMTP instance at 0x01E51288> 
__________________________________ test_noop ___________________________________ 
smtp = <smtplib.SMTP instance at 0x01E51288> 

予期された動作です。私は何を間違えているのですか?

# content of test_module.py 
def test_ehlo(smtp): 
    response = smtp.ehlo() 
    assert response[0] == 250 
    assert "merlinux" in response[1] 
    assert 0 # for demo purposes 

def test_noop(smtp): 
    response = smtp.noop() 
    assert response[0] == 250 
    assert 0 # for demo purposes 

でスクリプトからテストを実行する:

import pytest,os 
os.chdir("[path_to_tests]/tests") #your file location 
pytest.main(['-s', 'test_smtplib.py']) 

任意の提案test_smtplib.pyで

import pytest 
import smtplib 

@pytest.fixture(scope="module") 
def smtp(): 
return smtplib.SMTP("merlinux.eu") 

テストコード:

使用されるコードはconftest.pyですあなたの助けをたくさんありがとう!

+0

** py.test **テストランナー(*ウィンドウ - >環境設定 - > PyDev - > PyUnit - >テストランナー*)を使用するようにPyDev IDEを構成しましたか? –

+0

はい、PyDevテストランナーが選択されています。 – MBaumann

+0

いいえ、* PyDev Test Runner *ではなく、Py.test ** Test Runner * - > look:http://up.picr.de/14054750vh.jpg –

答えて

1

私はEclipseを持っていませんが、私はPydevとpytestのソースコードを見てきました。 pytestはデフォルトでマルチプロセッシングを使用しませんが、xdistがインストールされていればそれが実行されます。おそらくあなたはそれを持っていますか?あるいは、Eclipseがそれをインストールしているのでしょうか?

システムがまだ利用可能な場合は、pytestパラメータで以下のオプションを設定できますか? xdist as documented hereを使用すると、pytestは1つのプロセスを使用するように指示します。

-n=1またはおそらくそれは、それが動作しない場合は、これも動作しないはずです-n 1

を好むだろうが、あなたはそれを試みることができますか?モジュールレベルのテストを有効にするには、pytestオプション(pydevテストランナーオプションではありません)の下のオプションを使用してください。それはpydevテストランナーのオプションですので、エラーが発生すると思われますが、オプションをオフにする他のコードが使用する可能性があります。

--split_jobs=moduleか、再度、おそらく--split_jobs module

1

これはPyDevは側の長年のバグであるように思えます。私はそれを修正し、Pydevにプルリクエストを提出しました。https://github.com/fabioz/Pydev/pull/120を参照してください。その間、小さな変更を取り出し、インストールされているpydevのバージョンに適用して、有効なpydev/pytestを有効にすることができます。

+0

修正を適用しました。まもなく夜間のビルドで利用できるようになります(そして、修正版の次のリリースはPyDev 3.5.0になります) –

関連する問題