Neste contexto, a palavra "stub" é usada no lugar de "mock", mas por uma questão de clareza e precisão, o autor deveria ter usado "mock", pois "mock" é uma espécie de stub, mas para teste. Para evitar mais confusão, precisamos definir o que é um esboço.
No contexto geral, um stub é um pedaço de programa (normalmente uma função ou um objeto) que encapsula a complexidade de invocar outro programa (geralmente localizado em outra máquina, VM ou processo - mas nem sempre, também pode ser um local objeto). Como o programa real a ser invocado geralmente não está localizado no mesmo espaço de memória, invocá-lo requer muitas operações, como endereçamento, execução da invocação remota real, empacotamento / serialização dos dados / argumentos a serem passados (e o mesmo com o resultado potencial), talvez até lidando com autenticação / segurança e assim por diante. Observe que, em alguns contextos, os stubs também são chamados de proxies (como proxies dinâmicos em Java).
Um mock é um tipo muito específico e restritivo de stub, porque um mock é uma substituição de outra função ou objeto para teste. Na prática, costumamos usar simulações como programas locais (funções ou objetos) para substituir um programa remoto no ambiente de teste. Em qualquer caso, o mock pode simular o comportamento real do programa substituído em um contexto restrito.
Os tipos mais famosos de stubs são obviamente para programação distribuída, quando é necessário invocar procedimentos remotos ( RPC ) ou objetos remotos ( RMI , CORBA ). A maioria das bibliotecas / estruturas de programação distribuídas automatiza a geração de stubs para que você não precise escrevê-los manualmente. Os stubs podem ser gerados a partir de uma definição de interface, escrita com IDL por exemplo (mas você também pode usar qualquer linguagem para definir interfaces).
Normalmente, em RPC, RMI, CORBA e assim por diante, distinguem -se os stubs do lado do cliente , que cuidam principalmente do empacotamento / serialização dos argumentos e da execução da invocação remota, e dos stubs do lado do servidor , que cuidam principalmente do desempacotamento / desserialização os argumentos e realmente executa a função / método remoto. Obviamente, os stubs do cliente estão localizados no lado do cliente, enquanto os stubs do servidor (geralmente chamados de esqueletos) estão localizados no lado do servidor.
Escrever bons stubs eficientes e genéricos torna-se bastante desafiador ao lidar com referências de objetos. A maioria das estruturas de objetos distribuídos, como RMI e CORBA, lidam com referências a objetos distribuídos, mas isso é algo que a maioria dos programadores evita em ambientes REST, por exemplo. Normalmente, em ambientes REST, os programadores de JavaScript fazem funções stub simples para encapsular as invocações AJAX (serialização de objeto sendo suportada por JSON.parse
e JSON.stringify
). O projeto Swagger Codegen fornece um amplo suporte para a geração automática de stubs REST em vários idiomas.