house.py
:Comment tester une classe Héritée méthodes pytest
class House:
def is_habitable(self):
return True
def is_on_the_ground(self):
return True
conftest.py
:
import pytest
from house import House
@pytest.fixture(scope='class')
def house():
return House()
test_house.py
:
class TestHouse:
def test_habitability(self, house):
assert house.is_habitable()
def test_groundedness(self, house):
assert house.is_on_the_ground()
Jusqu'à ce moment-là, tout est testé.
maintenant ajouter une sous-classe et passer outre une méthode house.py
:
class House:
def is_habitable(self):
return True
def is_on_the_ground(self):
return True
class TreeHouse(House):
def is_on_the_ground(self):
return False
-je ajouter un nouvel appareil pour cette classe dans conftest.py
:
import pytest
from house import House
from house import TreeHouse
@pytest.fixture(scope='class')
def house():
return House()
@pytest.fixture(scope='class')
def tree_house():
return TreeHouse()
ajouter une nouvelle classe de test pour arbre maison test_house.py
:
class TestHouse:
def test_habitability(self, house):
assert house.is_habitable()
def test_groundedness(self, house):
assert house.is_on_the_ground()
class TestTreeHouse:
def test_groundedness(self, tree_house):
assert not tree_house.is_on_the_ground()
A ce poi NT, le code fonctionne, mais il y a des cas qui ne sont pas testés. Par exemple, pour être complet, je devrais tester à nouveau les méthodes héritées de House
dans TreeHouse
.
La réécriture des mêmes tests à partir du TestHouse
ne serait pas DRY.
Comment est-ce que je teste la méthode héritée de TreeHouse
(dans ce cas is_habitable
) sans dupliquer le code?
Je voudrais quelque chose comme re-tester le TreeHouse
avec les mêmes tests que sa super classe, mais pas pour les méthodes/propriétés qui sont nouvelles ou remplacées. Après quelques recherches, je suis tombé sur des sources contradictoires. Et après avoir creusé dans la documentation pyest, je ne comprends pas ce qui s'applique à ce scénario.
Je suis intéressé par le pytest pour ce faire. Veuillez consulter les documents et expliquer comment cela s'applique ici.
votre dernière ligne devrait être 'affirmer pas tree_house.is_on_the_ground()' –
merci pour l'édition @PaulH – Bastian
@PaulH Je suppose que je pourrais aussi me débarrasser de la '== True' dans les autres affirmations. – Bastian