Suponha que eu tenha um gerente de classe derivado de uma classe base Employee e que Employee tenha um método getEmail () herdado pelo Manager . Devo testar se o comportamento do método getEmail () de um gerente é de fato o mesmo que o de um funcionário?
No momento em que esses testes são escritos, o comportamento será o mesmo, mas é claro que em algum momento no futuro alguém poderá substituir esse método, alterar seu comportamento e, portanto, interromper meu aplicativo. No entanto, parece um pouco estranho testar essencialmente a ausência de código de intromissão.
(Observe que o método Manager :: getEmail () de teste não melhora a cobertura do código (ou qualquer outra métrica de qualidade do código (?)) Até que o Manager :: getEmail () seja criado / substituído.)
(Se a resposta for "Sim", algumas informações sobre como gerenciar testes compartilhados entre as classes base e derivadas serão úteis.)
Uma formulação equivalente da pergunta:
Se uma classe derivada herda um método de uma classe base, como você expressa (teste) se espera que o método herdado:
- Comporte-se exatamente da mesma maneira que a base agora (se o comportamento da base mudar, o comportamento do método derivado não);
- Comporte-se exatamente da mesma maneira que a base para todos os tempos (se o comportamento da classe base mudar, o comportamento da classe derivada também mudará); ou
- Comporte-se como quiser (você não se importa com o comportamento desse método porque nunca o chama).
Manager
classeEmployee
foi o primeiro grande erro.