Como os testes de unidade mudam quando uma classe base é expulsa?

Este é em parte um acompanhamento paraessa questã.

Não tenho certeza da melhor maneira de perguntar isso, então vou tentar uma pequena história para definir a cena:

Uma vez, havia uma classe 'A', que tinha uma classe de teste de unidade 'ATests' responsável por testar seu comportamento por meio da interface pública. Eles viveram felizes juntos por um tempo e, em seguida, aconteceu uma mudança, e a classe 'B' apareceu, que, como se viu, tinha muito em comum com a classe 'A', então uma classe base foi introduzida.

O comportamento público da classe base já está coberto pelos testes da classe A. Então, a questão é o que acontece a seguir?

• A classe B precisa ter testes para o comum (comportamento da classe base)? Parece que o comportamento faz parte de B, portanto deve ser testado, mas esses testes devem ser compartilhados com os da classe A? Para a classe base? Se sim, qual é a melhor maneira de compartilhar?

• A nova classe base precisa de testes de unidade ou é aceitável que as classes base sejam testadas através dos testes de seus filhos? Importa se a classe base é abstrata?

• É suficiente garantir que as classes A e B derivem da classe base e "confiem" nos testes de unidade da classe base para testar o comportamento comum (para que os testes não precisem ser replicados nas classes filho)? Os testes para A e B precisam apenas testar se eles são novos / alteraram o comportamento?

• Estou seguindo totalmente a abordagem errada, tendo aproximadamente uma classe de teste de unidade por classe real?

Adotei visões diferentes em momentos diferentes e as diferentes abordagens podem ter um grande impacto na capacidade de refatorar o código, no tempo necessário para escrever testes etc. Quais abordagens as pessoas acharam que funciona melhor?

questionAnswers(3)

yourAnswerToTheQuestion