TDD - Ao introduzir uma classe quando refatoração - deve essa classe ser unidade testada?

votos
4

Presumo que você tem uma classe que passa todos os seus testes de unidade atuais.

Se você fosse para adicionar ou retirar alguns métodos / introduzir uma nova classe e, em seguida, usar composição para incorporar a mesma funcionalidade que a nova classe exigem testes?

Estou dividido entre se você deve ou não de modo algum conselho seria ótimo.

Editar:

Suponha que eu deveria ter acrescentado eu uso DI (Dependency Injection), portanto, I deve injetar a nova classe também?

Publicado 19/05/2009 em 22:12
fonte usuário
Em outras línguas...                            


5 respostas

votos
5

Inicialmente, não, eles não são necessários. Se você tivesse uma cobertura perfeita, extraído da classe e não fez nada mais, você ainda teria cobertura perfeita (e esses testes confirmaria que a extração foi de fato um refactoring puro).

Mas, eventualmente - e provavelmente em breve - sim. A classe extraído é susceptível de ser utilizado fora do seu contexto original, e você deseja restringir o seu comportamento com os testes que são específicos para a nova classe, para que as alterações para um novo contexto não afetam inadvertidamente comportamento para o chamador original. É claro que os testes originais ainda iria revelar isso, mas bons testes de unidade apontar diretamente para a unidade problemática, e os testes originais são agora um passo removido.

Também é bom ter os novos testes como documentação executável para a classe recém-extraído.

Respondeu 19/05/2009 em 22:18
fonte usuário

votos
4

Não no contexto de TDD, não, IMHO. Os testes existentes justificar tudo sobre a existência da classe. Se você precisa adicionar um comportamento para a classe, que seria o momento de introduzir um teste.

Dito isto, pode fazer o seu código e os testes mais claras para mover os testes em uma classe que se relaciona com a nova classe que você fez. Isso depende muito do caso específico.

EDIT: Depois de sua edição, eu diria que isso faz um bom caso para mover alguns testes existentes (ou uma parte dos testes existentes). Se a classe é tão dissociadas que requer a injeção, então parece que os testes existentes podem não ser, obviamente, cobrindo-se ficar onde estão.

Respondeu 19/05/2009 em 22:16
fonte usuário

votos
1

Bem, sim e não.

Se bem entendi, você escreveu os testes, e escreveu o código de produção que faz os testes passam - isto é a coisa mais simples que funciona.

Agora você está na fase de refatoração. Você deseja extrair o código de uma classe e colocá-lo em uma classe própria, provavelmente para manter-se com a responsabilidade única Princípio (ou SRP).

Você pode fazer a refatoração sem adição de testes, já que os testes estão lá justamente para permitir que você refatorar sem medo. Lembre-se - refactor significa mudar o código, sem modificar a funcionalidade.

No entanto, é bastante provável que refactoring o código vai quebrar seus testes. Este é provavelmente causado por testes frágeis que testam o comportamento, ao invés de estado - ou seja, você zombou os métodos que você portado para fora.

Por outro lado, se os testes são principalmente impulsionado pelo Estado (ou seja, você afirmar resultados, e ignorar a execução), então o seu componente de serviço novo (o bloco de código que você extraiu a uma nova classe) não serão testados. Se você usar alguma forma de cobertura de código ferramenta de teste, você vai descobrir. Se for esse o caso, você pode querer testar se funciona. Talvez , porque 100% de cobertura de código não é desejável nem viável. Se possível, eu tento adicionar os testes para esse serviço.

No final, ele pode muito bem se resumem a um julgamento.

Respondeu 21/05/2009 em 09:32
fonte usuário

votos
0

Como já foi dito, é provavelmente não inteiramente necessário de imediato, uma vez que todos o mesmo material ainda está em teste. Mas uma vez que você começar a fazer mudanças para qualquer uma dessas duas classes individualmente, você deve separar os testes.

É claro, os testes não deve ser muito difícil de escrever; desde que você tem o material já está sendo testado, deve ser bastante trivial de romper os vários pedaços de testes.

Respondeu 19/05/2009 em 22:50
fonte usuário

votos
0

Eu diria que não. Ele já está sendo testada pelos testes executados na antiga classe.

Respondeu 19/05/2009 em 22:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more