Sei que essa é uma pergunta muito antiga, mas gostaria de acrescentar minha experiência. Alterei recentemente o hábito de teste de unidade de projetos separados para o mesmo.
Por quê?
Primeiro, sou muito propenso a manter a estrutura da pasta principal do mesmo projeto que o teste. Portanto, se eu tiver um arquivo Providers > DataProvider > SqlDataProvider.cs
, estou criando a mesma estrutura em meus projetos de teste de unidade, comoProviders > DataProvider > SqlDataProvider.Tests.cs
Mas depois que o projeto está ficando cada vez maior, uma vez que você move arquivos de uma pasta para outra ou de um projeto para outro, fica muito trabalhoso sincronizar os projetos de teste de unidade.
Segundo, nem sempre é muito fácil navegar da classe a ser testada para a classe de teste de unidade. Isso é ainda mais difícil para JavaScript e Python.
Recentemente, comecei a praticar que, a cada arquivo que criei (por exemplo SqlDataProvider.cs
), estou criando outro arquivo com o sufixo Test, comoSqlDataProvider.Tests.cs
No começo, parece que irá inchar arquivos e referências de bibliotecas, mas a longo prazo, você eliminará a síndrome dos arquivos em movimento à primeira vista e também garantirá que todos os arquivos candidatos a serem testados terão um arquivo emparelhado com .Tests
sufixo. Isso facilita o acesso ao arquivo de teste (porque fica lado a lado), em vez de procurar um projeto separado.
Você pode até escrever regras de negócios para varrer o projeto e identificar a classe que não possui o arquivo .Tests e relatá-las ao proprietário. Além disso, você pode dizer facilmente ao seu executor de teste para direcionar as .Tests
classes.
Especialmente para Js e Python, você não precisará importar suas referências de um caminho diferente; você pode simplesmente usar o mesmo caminho do arquivo de destino que está sendo testado.
Estou usando essa prática há algum tempo e acho que é uma troca muito razoável entre tamanho do projeto x capacidade de manutenção e curva de aprendizado para os novatos no projeto.