Objeto Mock

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Mock Object)
Ir para: navegação, pesquisa

Objetos Mock, objetos simulado ou simplesmente Mock (do inglês Mock object) em desenvolvimento de software são objetos que simulam o comportamento de objetos reais de forma controlada. São normalmente criados para testar o comportamento de outros objetos. Em outras palavras, os objetos mock são objetos “falsos” que simulam o comportamento de uma classe ou objeto “real” para que possamos focar o teste na unidade a ser testada.

Razões para usar[editar | editar código-fonte]

Em teste unitário, pode simular o comportamento de objetos reais complexos e são, portanto, muito úteis quando os objetos reais são difícies de criar ou impossíveis de serem incorporados no teste de unidade. Por exemplo, em um teste para um objeto que faz uma chamada remota é necessário que do outro lado exista um previsão para a chamada. Neste caso, em vez de usar o objeto real que faz a chamada, usa-se um mock object que simula o comportamento do objeto real. Se um objeto tem alguma das características a seguir, é provável que mock objects possam ser utilizados em seu lugar:

  • Gera resultados não deterministicos (e.g. a hora ou temperatura atual);
  • Tem estados que são difíceis de criar ou reproduzir (e.g. erro de comunicação da rede);
  • É lento (e.g. um banco de dados completo que precisa ser inicializado antes do teste);
  • Ainda não existe ou pode ter comportamento alterado;
  • Teriam que adicionar informações e métodos exclusivamente para os testes (e não para sua função real).

Por exemplo, um programa de despertador que faz uma campainha tocar em um certo momento necessita obter a hora atual. Para testar este comportamento, o teste de unidade deve esperar até que a hora programada chegue, para testar a campainha de forma correta. Se um mock object for usado no lugar do objeto real, então ele pode ser programada para simular a hora de programação do despertador. Assim o código do despertador pode ser testado corretamente.

Limitações[editar | editar código-fonte]

O uso de objetos mock pode casar os testes unitários com a atual implementação do codigo que está sendo testado. Por exemplo, algumas frameworks de objetos mock permitem o desenvolvedor especificar a ordem e o número de vezes que os metodos num objeto mock são chamados; Um sucessivo refactoring do código que está sendo testado, poderia portanto fazer que o teste falhe, mesmo se o método ainda obedece a lógica da implementação anterior. Isso nega completamente um dos benefícios oferecidos pelos testes unitários. Excesso de uso de objetos mock como parte de uma suite de testes unitários poderia então resultar num crescimento dramático de modificações que precisam ser feitas nos testes durante a evolução do sistema quando o refactoring é feito. Manutenção incorreta durante a evolução destes testes pode fazer com que certos erros passem despercebidos. Tais erros podem ser notados por testes unitários que usam instâncias de classes reais, os quais não precisam ser feitos frequentemente.

Objetos mock tem precisamente o modelo do comportamento do objeto que ele está simulando ("mocking"). O comportamento correto pode se tornar difícil de se obter se o objeto que está sendo simulado ("mocked") foi feito por outro desenvolvedor, ou, quando esse não tenha sido escrito ainda. Se o comportamento não for modelado corretamente, então os testes unitários devem registrar que o teste passou mesmo se uma falha ocorresse no tempo de execução, nas mesmas condições que o teste está exercendo e dessa forma, tornando inútil o teste unitário.

Ligações externas[editar | editar código-fonte]

Ícone de esboço Este artigo sobre Informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.