6

テストに必要なさまざまな設定でBaseクラスを作成しようとしています。すべてのテストをこのBaseクラスから継承したいと考えています。ランナーとしてpy.testを使用します。

しかし、そうしようとすると、 py.test はBaseクラスから継承されたこれらのテストを収集しないため、実行されません。ドキュメントに有用な情報が見つかりませんでした。

誰かが以前にそのような問題に直面したのではないでしょうか? 何か案は?

ありがとう。

PS テストがオブジェクトから継承されると、すべて正常に動作します。Py.test はそれらを見て正しく実行します。

コードの例:

私の基本クラス:

class BaseClass(object):
"""BaseClass"""
def __init__(self):
    super(BaseClass, self).__init__()
    self.bla = 'bla'

私のテストクラス:

import pytest
from base_class import BaseClass

class TestSmth(BaseClass):
    def test_test(self):
        test_instatnce = TestSmth()
        print test_instatnce.bla

if __name__ == '__main__':
    pytest.main([__file__, '-v'])

出力:

============================= test session starts ==============================
platform darwin -- Python 2.7.2 -- pytest-2.3.3 -- /usr/bin/python
collecting ... collected 0 items

===============================  in 0.01 seconds ===============================
[Finished in 0.4s]  
4

1 に答える 1

7

使えないと思います__init__。クラスをセットアップ(または初期化)する場合は、次のことができます。

# base_class.py

class BaseClass(object):
"""BaseClass"""

    @classmethod
    @pytest.fixture(scope = "class", autouse = True)
    def setup(self):
        self.bla = 'bla'

#test_class.py

import pytest
from base_class import BaseClass

class TestSmth(BaseClass):
    def test_test(self):
        print self.bla

if __name__ == '__main__':
    pytest.main([__file__, '-v'])

また、TestSmthクラスを初期化するために、別の「メソッド」を作成して、それを装飾することもできます@pytest.fixtureただし、これらの「初期化メソッド」はアルファベット順に呼び出されることを覚えておく必要があります。

于 2012-12-18T22:03:22.213 に答える