pytest · conftest · ViaCEP mock

Gerador de CEP em pytest

Fixture pytest com CEP brasileiro válido. conftest.py, pytest-django, mock ViaCEP API.

pip install fakeforge-br pytest pytest-mock

conftest.py

# tests/conftest.py
import pytest
from fakeforge import FakeForge

@pytest.fixture(scope="session")
def ff():
    return FakeForge()

@pytest.fixture(scope="session")
def ceps(ff):
    return ff.cep(100)

@pytest.fixture(scope="session")
def enderecos_completos(ff):
    return ff.address(50)

@pytest.fixture
def cep(ff):
    return ff.cep(1)[0]

Teste validador CEP

# tests/test_cep_validator.py
import pytest
from myapp.validators import validar_cep

class TestValidadorCep:
    def test_aceita_ceps_do_fakeforge(self, ceps):
        for c in ceps[:30]:
            assert validar_cep(c), f"Rejeitou CEP válido: {c}"

    def test_rejeita_cep_invalido(self):
        assert not validar_cep("00000-000")
        assert not validar_cep("")
        assert not validar_cep("abc")

    @pytest.mark.parametrize("indice", range(20))
    def test_formato_correto(self, ceps, indice):
        c = ceps[indice]
        # 5 dígitos + hífen + 3 dígitos
        assert len(c) == 9
        assert c[5] == "-"
        assert c.replace("-", "").isdigit()

Mock ViaCEP com pytest-mock

# tests/test_viacep_service.py
class TestViaCEPService:
    @pytest.fixture(autouse=True)
    def mock_viacep(self, mocker):
        return mocker.patch(
            "myapp.viacep.ViaCEPClient.consultar",
            return_value={
                "logradouro": "Rua Mock", "bairro": "Mock",
                "localidade": "São Paulo", "uf": "SP",
            }
        )

    def test_consulta_viacep(self, cep, mock_viacep):
        from myapp.viacep.service import ViaCEPService
        service = ViaCEPService()
        result = service.consultar(cep)
        assert result["uf"] == "SP"
        mock_viacep.assert_called_once_with(cep)