A questão do "como uma classe abstrata de teste de unidade?" vem à tona com frequência. Você estendê-lo, em seguida, substituir os métodos abstratos com Esboços sobre e então testar apenas a parte concreta do método? Ou você desenvolver um teste de unidade abstrata?
Pensamos que esta é provavelmente a pergunta errada quando se trata de classes abstratas. Na verdade pensamos que há uma boa maneira de evitar o problema completamente. Quando você considerar um abstract base classe lá são realmente dois métodos padrão de abordar isto:
O primeiro é onde você precisa se especializar um objeto abstrato. Neste caso você encontrará quase de certeza que os clientes precisam usar a classe abstrata que você criar através de uma interface de base.
Em segunda instância, você está criando a classe abstrata para tentar reduzir a duplicação. Nesse caso você verá rapidamente que os clientes realmente estão acessando versões concretas da classe quando eles acessá-los através de uma interface.
Uma mudança na abordagem de desenvolvimento de testes de software
Se você tomar o primeiro método acima, em seguida, você já terá uma interface foi totalmente definido. Que é através do processo dos métodos virtuais dentro as classes sendo implementados por suas classes derivadas recentemente. Por que não fazer que uma interface real da interface? Você pode trocar a classe abstrata para concreto. Em seguida, um instantâneo da nova interface do construtor. Todas as suas classes derivadas, em seguida, podem utilizar a interface real.
Isto faz a classe abstrata de teste simples. Basta usar um mock da interface e funciona por meio de qualquer implementações adicionais usando o que agora é uma interface real.
Para o segundo método, isso já está funcionando como uma classe auxiliar. Você pode examinar a funcionalidade dentro dessa classe abstrata e tente e trabalhá-lo em objetos que você está trabalhando. Se você achar que ainda há material dentro dessas classes que terminada - torná-lo uma classe auxiliar no Construtor (não se esqueça de tirar a classe base) e é uma implementação concreta. Isso é muito mais fácil de testar um resumo.
É possível combinar os métodos 1 e 2, e descobrimos que a melhor forma de abordagem que está a usar a abordagem para o segundo método simplesmente pegar a árvore de herança e convertê-lo em um padrão de estratégia.
A melhor maneira de classes abstratas de teste de unidade é simplesmente reduzir a classe em algo mais fácil de manusear.