Em estruturas de zombaria, você pode zombar de um objeto ou espioná -lo. Qual é a diferença entre os dois e quando devo / devo usar um sobre o outro?
Olhando para Mockito , por exemplo, vejo coisas semelhantes sendo feitas usando espiões e zombarias , mas não tenho certeza quanto à distinção entre os dois.
unit-testing
mocking
tdd
Vivin Paliath
fonte
fonte
Respostas:
O objeto simulado substitui completamente a classe simulada, retornando valores registrados ou padrão. Você pode criar uma simulação do "nada". É o que é usado principalmente durante o teste de unidade.
Ao espionar, você pega um objeto existente e "substitui" apenas alguns métodos. Isso é útil quando você tem uma classe enorme e deseja apenas zombar de certos métodos (zombaria parcial). Deixe-me citar a documentação do Mockito :
Em caso de dúvida, use zombaria.
fonte
Mockito alerta que zombaria parcial não é uma boa prática e você deve revisar sua arquitetura Orientada a Objetos. Spy (ou zombaria parcial) é recomendado para testar o código legado .
fonte
Vou tentar explicar usando um exemplo aqui:
Aqui, tínhamos um objeto real inicial
list
, no qual adicionamos um elemento e o tamanho esperado era um.Nós espionar significado objeto real que pode instruir o método a ser arrancado . Por isso, declaramos que stubbed o método -
size()
no objeto espião que retornará 10, independentemente do tamanho real.Em poucas palavras, você espiará objetos reais e apagará alguns dos métodos .
fonte
Referência: http://javapointers.com/tutorial/difference-between-spy-and-mock-in-mockito/
Ao usar objetos simulados, o comportamento padrão do método quando não stub é não fazer nada. Simples significa que, se for um método nulo, ele não fará nada quando você chamar o método ou se for um método com retorno, poderá retornar nulo, vazio ou o valor padrão.
Enquanto estiver em objetos espiões, é claro, já que é um método real, quando você não estiver stubando o método, ele chamará o comportamento do método real. Se você deseja alterar e zombar do método, é necessário stub-lo.
fonte
Zombarias não são tocos por Martin Fowler
fonte
Espiões têm duas definições. Um é onde o método real é chamado, outro onde, nenhuma funcionalidade é chamada e somente valores nulos ou nulos equivalentes são retornados, mas os métodos foram chamados e seu estado foi registrado, geralmente como o método x foi chamado y vezes.
fonte
No Mockito, se você atribuir qualquer objeto à variável de instância do Mock Object, isso não afetará o Mock Object.
Porém, no caso do Spy, se você atribuir qualquer objeto à variável de instância Spy Object, o Spy Object será afetado por causa do Spy agir como uma modificação do objeto em tempo real.
Para um exemplo de referência são
fonte