Quando é apropriado ignorar o encapsulamento em testes de unidade?
Recentemente, tomei conhecimento deCaixa branca de powermock funcionalidade. (Em resumo, ele permite testar diretamente métodos privados ou modificar membros privados diretamente de testes de unidade - mantendo-os privados!)
Eu sei que existem alguns quadros de pensamento que desaprovam o teste de unidade, exceto métodos visíveis, mas, droga, às vezes você só quer um teste simples para garantir que um método auxiliar de nível profundo esteja fazendo o que deveria fazer ... sem analisando o que poderia ser uma sobrecarga enorme para preparar os parâmetros e as zombarias necessários para os métodos-pai se filtrarem para o seu método ... e então você precisa fazer mágica para extrair os resultados desse método interno. Em resumo, em algum momento testar esses métodos internos requer os testes de unidade mais complexos e difíceis de seguir. (E, fyi, nossa empresa tem uma política de 100% de cobertura de teste de unidade.Esses métodos devem ser testados!)
Estou ciente de queuma metodologia émudança acessadores de método para permitir testes de unidade (por exemplo, alteração deprivate
paraprotected
, mas o powermock Whitebox permite um teste direto sem alterar o código-fonte.
Mesmo assim, Mamma sempre dizia: "Só porque você pode, não significa que deveria".
É sempre apropriado testar métodos internos como este? Em caso afirmativo, qual é a regra geral que devo usar?