Ir para o conteúdo

Testes

Guia completo sobre testes no Global-Data-Finance.


Estrutura de Testes

tests/
├── brazil/
│   ├── b3_data/
│   │   └── historical_quotes/
│   │       ├── domain/
│   │       ├── application/
│   │       └── infra/
│   └── cvm/
│       └── fundamental_stocks_data/
│           ├── domain/
│           ├── application/
│           └── infra/
└── macro_exceptions/

Executando Testes

Todos os Testes

pytest

Com Cobertura

pytest --cov=src --cov-report=html

Marcadores

# Apenas testes unitários
pytest -m unit

# Apenas testes de integração
pytest -m integration

# Pular testes lentos
pytest -m "not slow"

# Pular testes que precisam de rede
pytest -m "not requires_network"

Escrevendo Testes

Teste Unitário

import pytest
from globaldatafinance.brazil.cvm.fundamental_stocks_data.domain import AvailableDocs
from globaldatafinance.brazil.cvm.fundamental_stocks_data.exceptions import InvalidDocName

@pytest.mark.unit
class TestAvailableDocs:
    def test_validate_valid_doc(self):
        """Testa validação de documento válido."""
        docs = AvailableDocs()
        docs.validate_docs_name("DFP")  # Não deve lançar exceção

    def test_validate_invalid_doc(self):
        """Testa validação de documento inválido."""
        docs = AvailableDocs()
        with pytest.raises(InvalidDocName):
            docs.validate_docs_name("INVALID")

Teste de Integração

import pytest
from globaldatafinance import FundamentalStocksDataCVM

@pytest.mark.integration
@pytest.mark.requires_network
class TestFundamentalStocksDataIntegration:
    def test_get_available_docs(self):
        """Testa obtenção de documentos disponíveis."""
        cvm = FundamentalStocksDataCVM()
        docs = cvm.get_available_docs()

        assert isinstance(docs, dict)
        assert len(docs) > 0
        assert "DFP" in docs

Fixtures

import pytest
from pathlib import Path

@pytest.fixture
def temp_dir(tmp_path):
    """Cria diretório temporário para testes."""
    return tmp_path

@pytest.fixture
def sample_zip_file(tmp_path):
    """Cria arquivo ZIP de exemplo."""
    zip_path = tmp_path / "test.zip"
    # Criar ZIP...
    return zip_path

Cobertura

Objetivo: >= 80% de cobertura

# Gerar relatório
pytest --cov=src --cov-report=term-missing

# Relatório HTML
pytest --cov=src --cov-report=html
open htmlcov/index.html

CI/CD

Testes são executados automaticamente em:

  • Push para main ou develop
  • Pull Requests
  • Releases

Veja também: