De vez em quando eu me pego conferindo o tópico de colocação de teste, e toda vez a maioria recomenda uma estrutura de pastas separada ao lado do código da biblioteca, mas acho que toda vez que os argumentos são os mesmos e não são tão convincentes. Acabo colocando meus módulos de teste em algum lugar ao lado dos módulos principais.
A principal razão para fazer isso é: refatoração .
Quando movo as coisas, quero que os módulos de teste sejam movidos com o código; é fácil perder testes se eles estiverem em uma árvore separada. Sejamos honestos, mais cedo ou mais tarde você acaba com uma estrutura de pastas totalmente diferente, como django , balão e muitas outras. O que é bom se você não se importa.
A principal questão que você deve se perguntar é:
Estou escrevendo:
- a) biblioteca reutilizável ou
- b) construir um projeto que agrupe alguns módulos semi-separados?
Se um:
Uma pasta separada e o esforço extra para manter sua estrutura podem ser mais adequados. Ninguém vai reclamar dos seus testes sendo implantados na produção .
Mas também é fácil excluir os testes da distribuição quando eles são misturados às pastas principais; coloque isso no setup.py :
find_packages("src", exclude=["*.tests", "*.tests.*", "tests.*", "tests"])
Se b:
Você pode desejar - como todos nós - que esteja escrevendo bibliotecas reutilizáveis, mas na maioria das vezes a vida delas está ligada à vida do projeto. A capacidade de manter facilmente seu projeto deve ser uma prioridade.
Então, se você fez um bom trabalho e seu módulo é adequado para outro projeto, ele provavelmente será copiado - não bifurcado ou transformado em uma biblioteca separada - para esse novo projeto e movendo testes que ficam ao lado dele na mesma estrutura de pastas é fácil em comparação com a busca de testes em uma bagunça em que uma pasta de teste separada se tornou. (Você pode argumentar que não deve ser uma bagunça em primeiro lugar, mas vamos ser realistas aqui).
Portanto, a escolha ainda é sua, mas eu argumentaria que, com testes confusos, você realiza as mesmas coisas que em uma pasta separada, mas com menos esforço para manter as coisas organizadas.