house.py
:Wie eine Klasse testen Methoden in pytest geerbt
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()
Bis zu diesem Zeitpunkt getestet wird alles wird.
Nun füge ich eine Unterklasse und überschreiben Sie eine Methode in 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
Ich füge auch eine neue Halterung für diese Klasse in 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()
ich fügen Sie eine neue Testklasse für Baum Haus in 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()
In diesem poi Nein, der Code funktioniert, aber es gibt Fälle, die nicht getestet werden. Um zum Beispiel zu vervollständigen, müsste ich erneut die Methoden testen, die von House
in TreeHouse
geerbt wurden.
Das Umschreiben der gleichen Tests von TestHouse
wäre nicht DRY.
Wie kann ich die geerbte Methode TreeHouse
(in diesem Fall is_habitable
) ohne Duplizierungscode testen?
Ich möchte etwas wie das Testen der TreeHouse
mit den gleichen Tests, die seine Super-Klasse durchläuft, aber nicht für die Methoden/Eigenschaften, die neu oder außer Kraft gesetzt sind.
Nach einigen Recherchen stieß ich auf widersprüchliche Quellen. Und nachdem ich die pietäteste Dokumentation ausgegraben habe, verstehe ich nicht, was auf dieses Szenario zutrifft.
Ich interessiere mich für die pytest Weg, dies zu tun. Bitte verweisen Sie auf die Dokumentation und erklären Sie, wie das hier zutrifft.
Ihre allerletzte Zeile sollte 'assert not tree_house.is_on_the_ground() 'sein –
danke für die Bearbeitung @PaulH – Bastian
@PaulH Ich denke, ich könnte auch loswerden der' == True' in den anderen behauptet. – Bastian