8

Python2 と Python3 の両方で動作するパッケージ ( http://github.com/anntzer/parsedcmd ) を作成しました。ただし、Python2 と Python3 の単体テスト (py.test) を個別に作成する必要があったため (主に、Python3 の追加機能、特にキーワードのみの引数をテストしたいため)、サブパッケージに atest_py2.pyと atest_py3.pyがあります。testここで、たとえば を実行するとpy.test2 mypkgtest_py2合格しますが、 でtest_py3失敗しますSyntaxError。同様に、 forpy.test3 mypkgtest_py3合格しますがtest_py2失敗します (ただし、これを機能させることはできますが、これはStringIOに移動しただけの問題ですio)。

test適切なバージョンのテストのみをインポートするようにサブパッケージを設計できますimport mypkg.testが、明らかに py.test は気にしません.2つのファイルが一致していることを確認し、インポートするように指示するtest_*ものを無視して、両方のファイルのすべてのテストを取得します。__init__.py

だから今、私は と の両方をしなければなりませpy.test2 mypkg/test/test_py2.pypy.test3 mypkg/test/test_py3.py。すべてをセットアップして「うまくいく」ようpy.test2 mypkgにする方法はありますか?py.test3 mypkg

ありがとう。

4

2 に答える 2

5

モジュールをすべてのインタープリターでインポート可能にし、必要に応じてテストをスキップすることが一般的な解決策です。それ以外の場合は、次を「conftest.py」としてテスト ディレクトリに配置できます。

import sys
py3 = sys.version_info[0] >= 3

class DummyCollector(pytest.collect.File):
   def collect(self):
      return []

def pytest_pycollect_makemodule(path, parent):
  bn = path.basename 
  if "py3" in bn and not py3 or ("py2" in bn and py3):
     return DummyCollector(path, parent=parent)

これにより、プロジェクト固有のプラグインが取得され、間違ったインタープリター バージョンの "py2" または "py3" 部分文字列を含むファイル名を持つテスト モジュールが適切に無視されます。もちろん、ファイル名 etc.pp をチェックする代わりに、明示的なリストを conftest.py ファイルに直接含めるように改良することもできます。

HTH、ホルガー

于 2012-05-23T20:12:42.190 に答える
0

You can put your tests in different packages and run only the tests in the appropriate package. Or you can load the appropriate test module in a script:

import sys, unittest

cur_version = sys.version_info

if cur_version[0] < 3:
   import myApp.test.test_py2
   unittest.TestLoader().loadTestsFromModule(myApp.test.test_py2).run()
else:
   import myApp.test.test_py3
   unittest.TestLoader().loadTestsFromModule(myApp.test.test_py3).run()

Alternatively, use a setup.py file so you can run:

python setup.py test

and put the versioning logic in there:

versionedTestSuite = "parsedcmd.test.test_py2" # do something as above here
setup(name='parsedcmd',
      ...
      test_suite=versionedTestSuite,
      )
于 2012-04-29T18:04:14.653 に答える