Dúvida teórica sobre testes

Dúvida teórica sobre testes

by Carlos Eduardo Moreira dos Santos -
Number of replies: 3
Qual o procedimento correto para testar um método private? É correto torná-lo público apenas para testá-lo (vide Cliente.ligacoesRealizadas() no código do Kata-EP1)? Se não, o que deveria fazer? Torná-lo protected e criar uma classe filha que o expõe publicamente e utilizar esta última?

Outra dúvida: qual a diferença entre mocks e stubs?

Obrigado
In reply to Carlos Eduardo Moreira dos Santos

Re: Dúvida teórica sobre testes

by Carlos Eduardo Moreira dos Santos -
Explicando como surgiu a dúvida: o método run chama outros métodos private enquanto não recebe um evento externo para parar. O problema é, por exemplo, acionar esse evento externo exatamente no momento apropriado para o teste (após um único movimento de um carro, por exemplo). Foi então que pensei em testar chamando os métodos "private".
In reply to Carlos Eduardo Moreira dos Santos

Re: Dúvida teórica sobre testes

by Lucas C. dos Santos -
transformar um método em público só pra testes não é legal... quebra vários princípios de OO, e coisas do tipo...

vc tem algumas opções:
- transformar em package protected (sem modificador, é acessado só por classes do mesmo pacote) ruim..
- testar o método via reflection (meio cheating e difícil, mas tem um projeto open source que ajuda bastante: http://projetos.vidageek.net/mirror/mirror/)
- isolar o comportamento que vc quer testar, passando valores manualmente pras outras coisas...

na última opção que entram os Mocks/Stubs
existem vários tipos de Mocks... mocks são objetos que fingem ser outros...
ou seja, mocks são quaisquer objetos que vc usa pra "enganar" sua classe em
teste.
Stub é um tipo de Mock...
não vou tentar dar a definição exata, mas os mocks podem tanto retornar
valores padrão, garantir que determinadas coisas aconteceram, ou garantir
que eles nunca aconteçam... ou seja definir um comportamento padrão para
certos objetos, pra vc poder testar outros objetos unitariamente...

In reply to Carlos Eduardo Moreira dos Santos

Re: Dúvida teórica sobre testes

by Fabricio Sousa Nascimento -
Não mexi no ep ainda, então não sei o quanto esses private deveriam ser isso ai mesmo...

Até onde eu sei vc não deveria ter que quebrar OO para resolver isso, como o Lucas disse.

Se os seus métodos private são muito simples e só servem para evitar repetições de comportamento dentro da classe (eles provavelmente foram refatorados porque havia repetição e etc) então me parece tudo bem não serem testados. Eles serão usados internamente, e se estiverem com comportamento errado vão refletir isso nos testes da classe.

Ao meu ver, os testes verificam o comportamento visível da classe (o que é público). Se existe muito comportamento privado, e a lógica é complexa, talvez vc esteja juntando o que são duas classes em uma só. Valeria a pena pensar se esses private não deveriam ser uma outra classe do qual a classe inicial dependeria.