J'utilise pytest avec certains appareils compliqués à injection de dépendances. J'ai des appareils qui utilisent d'autres appareils dans une longue chaîne. J'aimerais pouvoir modifier certains appareils au milieu de la chaîne pour des tests spécifiques.Surclassement de sous-agencements dans pytest
Compte tenu de ces (simplifié) accessoires:
@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)
Et quelques tests:
def test_service_when_resource_working(service):
assert service.status == "good"
def test_service_when_resource_broken(service):
assert service.status == "bad"
Comment puis-je remplacer l'appareil resource
de sorte qu'il est comme ça:
@pytest.fixture
def broken_resource(cache):
return Resource(cache=cache, working=False)
. ..mais seulement pour le cas de test test_service_when_resource_broken
? Je peux créer un broken_service
qui utilise broken_resource
, mais la réalité est que la chaîne de dépendance est longue, et je veux réutiliser tous les appareils, mais en modifier sélectivement certains au milieu pour les tests sélectionnés.
Je veux faire quelque chose comme ça (pseudo-code):
@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"
Parfait. Merci! –
Heureux, ça a aidé, pourriez-vous s'il vous plaît marquer la réponse comme acceptée. – Sanju