Na verdade, estamos nomeando nossos pacotes de teste exatamente como seus equivalentes de teste. Então, acabamos com esta estrutura:
src/main/java
com.hello.world
helloWorld.java
src/test/java
com.hello.world
helloWorldTest.java
Eu sempre senti que isso não é muito inteligente, pois você não pode distinguir entre "teste" e "testar" se fornecido apenas com o nome do pacote. Por outro lado, não encontrei realmente um caso em que isso importe de alguma forma. É uma boa prática ter as mesmas convenções de nomenclatura para os dois pacotes (para os casos de teste e as classes de origem)? Caso contrário, qual seria uma abordagem melhor?
XXXTest()
emcom.hello.world.test.helloWorldTest.java
. O conselho geral seria exibir apenas "Teste" uma vez no caminho; portanto, (a) use teste no nome do pacote (e nomeie o arquivo de teste da mesma forma que o arquivo em teste) ou (b) torne o nome do pacote o mesmo e adicione "test" ao nome do arquivo / classe.Respostas:
Essa é uma boa convenção.
Às vezes, você deseja escrever testes de unidade para classes e métodos privados de pacotes também. Você não poderá chamá-los de uma classe de teste de unidade colocada em outro pacote.
Não deve haver nenhuma confusão sobre ter classes de teste de unidade no mesmo espaço para nome, pois elas não deveriam estar no caminho da classe ao compilar ou executar o código de produção.
Aqui está um exemplo de um pequeno módulo com uma interface pública, uma classe de fábrica pública e duas classes de implementação privadas do pacote:
Ocultar as implementações da interface do transmogrificador pode ser uma opção de design válida. Talvez seja da responsabilidade da classe da fábrica escolher a implementação.
Como as implementações são privadas de pacote, é necessário colocar as classes de teste de unidade no mesmo pacote se desejar testá-las diretamente. Se você tiver suas classes de teste de unidade em algum outro pacote, você só terá acesso direto à interface pública e à classe de fábrica de seus testes.
fonte
MapTransmogrifier
eListTransmogrifier
e decidem que poderia ser feito em uma classe, para que você criarListMapTransmogrifier
, modificar a fábrica de usar que e excluir as duas classes. O código agora não é compilado, então você precisa modificar todos os testes nos doisMapTransmogrifierTest
eListTransmogrifierTest
compilá-lo. Um teste falha. Isso foi devido à alteração dos testes ou à criaçãoListMapTransmogrifier
? Vem para fora o depurador para descobrir ... alternativamente, quando os testes de usar a fábrica, você fazer isso refactor e todos compila ainda ...