2017-09-01 1 views
1

J'ai de la difficulté à utiliser les appareils avec mes tests unitaires.Pytest call setup() avant l'appareil

J'utilise une classe de test comme celui-ci:

class TestMyApp(object): 

    def setup(self): 
     self.client = mock_client() 

    @pytest.fixture 
    def client_item(self): 
     return self.client.create_item('test_item') 

    def test_something1(self, client_item): 
     # Test here. 
     pass 

Quand je lance le test ci-dessus, je reçois l'exception suivante:

AttributeError: 'TestMyApp' object has no attribute 'client' 

Je crois que c'est parce que la fonction de fixation client_item() est d'être appelé avant la fonction setup().

Est-ce que j'utilise mal les appareils? Ou est-il possible de forcer setup() à être appelé avant les fonctions de l'appareil?

Merci d'avance.

Répondre

1

Les luminaires à tubes peuvent utiliser d'autres appareils, afin que vous puissiez utiliser des appareils tout en bas:

class TestMyApp(object): 

    @pytest.fixture 
    def client(self): 
     return mock_client() 

    @pytest.fixture 
    def client_item(self, client): 
     return client.create_item('test_item') 

    def test_something1(self, client_item): 
     # Test here. 
     pass 

Le documentation recommande subtilement fixtures sur la configuration de style xUnit/méthodes teardown:

Bien que ces setup/Les méthodes de démontage sont simples et familières à ceux qui proviennent d'un arrière-plan unittest ou nose, vous pouvez également envisager d'utiliser fixture mechanism plus puissant de pytest qui tire parti du concept d'injection de dépendance, permettant Une approche modulaire et plus évolutive pour la gestion de l'état des tests, en particulier pour les projets plus importants et pour les tests fonctionnels.

Il poursuit en disant que les deux styles peuvent être mélangés, mais ne sait pas sur l'ordre dans lequel les choses vont se passer.