2017-08-28 5 views
0

私はpytestをいくつかの複雑な依存関係注入フィクスチャで使用しています。私は長鎖で他の器具を使用する器具を持っています。私は特定のテストのためにチェーンの真ん中のいくつかの器具を変更することができるようにしたいと思います。pytestのサブフィクスチャを無効にする

を考えると、これらの(簡体字)備品:

@pytest.fixture 
def cache(): 
    return Cache() 

# Use cache fixture in a new fixture. 
@pytest.fixture 
def resource(cache): 
    return Resource(cache=cache, working=True) 

# Use resource fixture in a new fixture. 
@pytest.fixture 
def service(resource): 
    return Service(resource=resource) 

そして、いくつかのテスト:

def test_service_when_resource_working(service): 
    assert service.status == "good" 

def test_service_when_resource_broken(service): 
    assert service.status == "bad" 

それはこのようなものだように、私はresourceフィクスチャを無効にするにはどうすればよい:

@pytest.fixture 
def broken_resource(cache): 
    return Resource(cache=cache, working=False) 

。 .. test_service_when_resource_brokenのテストケースの場合のみですか?私はbroken_resourceを使用するbroken_serviceを作成することができますが、現実には依存関係のチェーンが長く、すべてのフィクスチャを再利用したいのですが、選択されたテストのために中間で一部を選択的に変更します。

は、私は、この(擬似コード)のような何かをしたい:

@pytest.override_fixture('resource', 'broken_resource') 
def test_service_when_resource_broken(service): 
    # service should have been instantiated with broken_resource instead of resource. 
    assert service.status == "bad" 

答えて

2

あなたが期待しているものを達成するために、あなたのテストにmarkersを使用することができます。 基本的に、異なる動作が必要なテストにマークを付けます。フィクスチャメソッドでは、要求しているテストコンテキストとプロセスからそのマーカを探します。

これはどのように行うことができます。

@pytest.fixture 
def cache(): 
    return Cache() 

# Use cache fixture in a new fixture. 


@pytest.fixture 
def resource(request, cache): 
    working = True 
    marker = request.node.get_marker("broken") 
    if marker: 
     working = False 

    return Resource(cache=cache, working=working) 


# Use resource fixture in a new fixture. 
@pytest.fixture 
def service(resource): 
    return Service(resource=resource) 


def test_service_when_resource_working(service): 
    assert service.status == "good" 


@pytest.mark.broken 
def test_service_when_resource_broken(service): 
    assert service.status == "bad" 
+0

パーフェクト。ありがとう! –

+0

喜んで、それは助けられました。 – Sanju

関連する問題