Se eu tiver uma função complexa de unidade testada :
def do_everything():
# turn twizzles
# push buttons
# move mountain
E eu o fatorizo novamente em algumas unidades menores:
def do_everything():
turn_twizzles()
push_buttons()
move_mountain()
def turn_twizzles():
# turn twizzles
def push_buttons():
# push buttons
def move_mountain():
# move mountain
Estou perdendo meu tempo escrevendo testes de unidade extras para essas unidades menores?
unit-testing
refactoring
Adam Terrey
fonte
fonte
private
palavra-chave em uma linguagem de programação é apenas uma das muitas maneiras de restringir o acesso a um pedaço de código.Depende. Para ser mais preciso, depende de
Especialmente quando essas "funções menores" não são tão triviais como no seu exemplo, mas têm uma lista mais ou menos complexa de parâmetros de entrada, pode ser muito difícil produzir testes de unidade suficientes para sua função original para garantir que as funções menores sejam testadas com todas as combinações de entradas "interessantes". Isso seria um sinal claro para escrever testes de unidade específicos também para as funções menores.
Portanto, não há um "sim" ou "não" claro para essa pergunta; é uma troca que você deve decidir por caso.
fonte
Se
turn_twizzles
,,push_buttons
emove_mountain
são públicos e chamados por outro código, acho importante refatorar seus testes para testar essas funções individualmente.Infelizmente, após a sua refactor você tem um problema: para teste de unidade
do_everything
que você precisa para ser capaz de zombarturn_twizzles
,push_buttons
emove_mountain
. Escrever testesdo_everything
sem zombar das dependências será um teste de integração - não necessariamente uma coisa ruim, dependendo do seu plano de teste, mas não haverá muitos benefícios porque você já está testando as três funções menores individualmente. Pode ser o momento certo para você reprojetar esse componente e colaborar com outros objetos para realizar todo o trabalhodo_everything
.Se
turn_twizzles
,,push_buttons
emove_mountain
não forem chamados externamente, eles deverão ser marcados como particulares, e eu não recomendaria testá-los separadamente dedo_everything
. Isso ocorre porque, do ponto de vista de fora,do_everything
seria a menor unidade (porque as outras são inacessíveis). Veja também esta resposta sobre como dividir métodos usando métodos privados.fonte
do_everything
que você precisa para ser capaz de zombarturn_twizzles
,push_buttons
emove_mountain
... " depende de uma definição absurdo de "teste de unidade".Não. Os testes de unidade extras são mais precisos. Se
move_mountain
falhar, um único teste falhará que diz muito especificamente o que deu errado.Essa precisão reduz o tempo de depuração, o que é valioso. Além disso, como o teste é mais focado, deve ser mais rápido executar do que testar a mesma funcionalidade através da função completa, fornecendo feedback mais rápido, o que é valioso.
fonte