2017-08-22 6 views
2

私はunittestで書かれたコードベースで作業しています。テストはpytestで実行されます。私はそれらのいくつかをパラメータ化してテストを簡素化しようとしています。この目標を達成するために、私はpytest fixtureとrefactorを使って既存のunittestベースのテストを使う方法を学びたいと考えています。現在のテストはconftest.pyでグローバルなフィクスチャを持っている:チェーンの複数の固定具pytest/unittestハイブリッド

@pytest.fixture(autouse=True) 
def register_cleanup(): 
    yield True 
    print("cleaning up database") 

今、私は私のテストモジュールの一つに固有のフィクスチャを追加したい、しかし

@pytest.fixture() 
def foo_fixture(): 
    print("setup fixture") 
    yield 
    print("tear down fixture") 


class Foo(unittest.TestCase): 
    def setUp(self): 
     print('unittest setUp()') 

    def test(self): 
     print('test') 

の線に沿って何かを、このモジュールフィクスチャ内のprint()文は決して実行されません。中間段階として、私はunittestベースの構造を維持し、それに追加しています。この作業を私が望むやり方で行うことは可能ですか?また、unittestを完全に廃止してpytestに直接行く必要がありますか?

+0

あなたは、この治具を使用することを期待するでしょうか?ここでも 'autouse = True'をオンにしたかったのですか?一般的に、フィクスチャはテストのパラメータであるときにのみ実行され、スコープ付きの仮定よりも一般的なクリーンアップのメカニズムは少ない – Cireo

+0

@Cireo 'register_cleanup 'と同様に' autoo = True'を 'foo_fixture() () '? –

+0

@Cireoこれを回答として投稿してください。 –

答えて

1

あなたはそれをマークすることをお勧めします:

@pytest.mark.usefixtures("foo_fixture") 
class Foo(unittest.TestCase): 
    ... 

注:あなたは、複数のconftest.pyを有することができます。より具体的なフィクスチャをこのテストサブディレクトリのconftest.pyに置きます。

+0

ありがとうございます。私はドキュメントをスキミングしているので、必要な詳細を見逃しているに違いない。 –

+0

残念ながら、すべてのテストは1つのディレクトリにあります。私がリファクタリングするにつれて、私はそれらをより整理することに目を向けるでしょう。 –

0

このフィクスチャを使用するにはどうしますか?

ここでもautouse=Trueを有効にしますか?一般に、フィクスチャはテストのパラメータである場合にのみ実行され、スコープ付きの仮定よりも一般的なクリーンアップメカニズムの方が少なくなります。この治具用autouseをオンにすることで、あなたは基本的に現在のモジュールのための余分なセットアップ、クリーンアップステップを追加します。

autouse器具は従う:

https://docs.pytest.org/en/latest/fixture.html#autouse-fixtures-xunit-setup-on-steroids

ここ

はautouse備品が他のスコープで働く方法ですscope = keyword-argument:autouse フィクスチャにscope = 'session'がある場合、それは に関係なく1回だけ実行されます。スコープ= 'クラス'はクラスごとに1回実行されることを意味します。 テストモジュールにオートセットアップフィクスチャが定義されている場合、すべてのテストの 関数が自動的に使用します。 autouse fixtureが conftest.pyファイルで定義されている場合、その ディレクトリの下にあるすべてのテストモジュールのすべてのテストがフィクスチャを起動します。最後に、 と一緒に使用してください。注意:プラグインでautouse fixtureを定義すると、プラグインがインストールされているすべてのプロジェクトのすべてのテストで が呼び出されます。これは、 の設定がある場合にのみ、いずれかの什器が動作する場合に便利です。 g。 iniファイル内にあります。そのようなグローバルな什器は、常に は、それが何かの仕事をしなければならないかどうかを素早く判断しなければならず、そうでなければ避けるべきです。 高価な輸入または計算。

[解答にAdaptiedコメント]

関連する問題