pytest tmp_path: Teste Arquivos sem Sujar o Projeto resolve um problema recorrente em projetos Python: Crie um diretório exclusivo por teste e trabalhe com ele como um objeto pathlib.Path. Este guia mostra o mecanismo, um exemplo executável e os limites que evitam uma implementação frágil.

Conceito e caso de uso

tmp_path entrega um Path temporário isolado. Isso elimina nomes globais, facilita execução paralela e deixa a limpeza sob responsabilidade do pytest.

Para revisar os fundamentos relacionados, consulte também o guia de pytest. A integração fica mais simples quando cada função recebe dependências e dados explicitamente, em vez de depender de estado global.

Exemplo prático

from pathlib import Path


def save_report(path: Path, rows: list[str]) -> None:
    path.write_text("\n".join(rows), encoding="utf-8")


def test_save_report(tmp_path: Path):
    output = tmp_path / "report.txt"
    save_report(output, ["alpha", "beta"])
    assert output.read_text(encoding="utf-8") == "alpha\nbeta"

Faça a função receber o caminho em vez de descobrir uma pasta global. Monte somente os arquivos necessários e verifique conteúdo, encoding e estrutura.

Decisões importantes

A escolha correta depende do contrato público, do volume e do comportamento em caso de falha.

Considere como a solução se comporta sob concorrência, entradas vazias e falhas parciais. Documente qualquer limite que afete consumidores e mantenha nomes que expressem a intenção.

Erros comuns

O exemplo mínimo não substitui limites, tratamento de erros e observabilidade. Usar o diretório do repositório deixa resíduos e cria dependência de ordem. Mockar toda a API de arquivos pode esconder erros reais de integração.

Evite capturar exceções sem contexto ou retornar resultados parciais como se fossem completos. Uma falha explícita costuma ser mais segura que dados silenciosamente incorretos.

Como validar

Valide o comportamento, não apenas a linha feliz. Execute o teste repetidamente e em paralelo, teste nomes com espaços e caracteres não ASCII e confirme o comportamento para arquivo ausente.

A documentação oficial, consultada em 28 de julho de 2026, detalha a API e deve ser a referência para mudanças futuras.