Como testar métodos herdados de uma classe no pytest

house.py:

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()

Até esse ponto, tudo está sendo testado.

Agora eu adiciono uma subclasse e substituo um método emhouse.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

Também adiciono um novo acessório para essa classe emconftest.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()

Eu adiciono uma nova classe de teste para casa na árvore emtest_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()

Nesse ponto, o código funciona, mas há casos que não são testados. Por exemplo, para ser completo, eu precisaria testar novamente os métodos herdados deHouse noTreeHouse.

Reescrevendo os mesmos testes doTestHouse não seria SECO.

Como faço para testar o método herdado deTreeHouse (nesse casois_habitable) sem duplicar o código?

Eu gostaria de algo como testar novamente oTreeHouse com os mesmos testes pelos quais sua superclasse é executada, mas não para os métodos / propriedades que são novos ou substituídos.

Depois de algumas pesquisas, me deparei com fontes contraditórias. E depois de pesquisar na documentação do pytest, não entendi o que se aplica a esse cenário.

Estou interessado nopytest maneira de fazer isso. Consulte os documentos e explique como isso se aplica aqui.

questionAnswers(2)

yourAnswerToTheQuestion