2

コードの機能テストには、データベースなどの外部リソースが必要になることがよくあります。

基本的に 2 つのアプローチがあります。

  • リソース (データベースなど) は常に実行されており、常に利用可能であると仮定します。
  • テストの一環として関連リソースを開始/停止します

Python unittest(2) の「古い」世界では、サービスを制御するために setUp() および tearDown() メソッドを使用できました。

py.test により、世界はより複雑になり、 setUp() および tearDown() メソッドの概念は、フィクスチャを実装するための funcarg マジックに置き換えられました。正直なところ、このアプローチは壊れています - 少なくとも setUp/tearDown メソッドの代わりとして。

py.test が使用されているプロジェクトでサービスとリソースを制御するための推奨される方法は何ですか?

setUp/tearDown メソッドを使用してテストを (少なくとも必要に応じて) 書き続ける必要がありますか、それともより良いパターンがありますか?

4

2 に答える 2

1

pytest は xUnit スタイルの setup/teardown メソッドをサポートしています。http://pytest.org/latest/xunit_setup.html を参照してくださいこのスタイルを好む場合はそのまま使用できます。

http://pytest.org/latest/fixture.htmlを使用して、テスト実行全体の外部プロセスをインスタンス化し、接続オブジェクトを返すことができる「セッション」スコープのフィクスチャをインスタンス化することもできます。コードは大まかに次のようになります。

# content of conftest.py

import pytest

@pytest.fixture(scope="session")
def connection():
    ... instantiate process ...
    return connection_to_process_or_url

次のようにそれを使用してファイルをテストします。

# content of test_conn.py
def test_conn_ok(connection):
    ... work with connection ...

テスト実行間でサービスを維持したい場合は、当分の間、いくつかのロジック (PID を保存し、それが有効であることを確認し、PID がないか有効でない場合は、新しいプロセスを開始する) を自分で作成する必要があります (将来のリリースでは、そのようなサポート コード)。

于 2013-01-12T23:51:42.677 に答える