O que é objeto de zombaria e quando eu preciso dele?

votos
40

Muitas pessoas usam Mock Objects quando eles estão escrevendo testes de unidade. O que é um objeto de simulação ? Por que eu iria precisa de um? Preciso de um quadro de objeto Mock?

Publicado 07/08/2008 em 03:37
fonte usuário
Em outras línguas...                            


9 respostas

votos
35

Objeto de zombaria é usado para manter as dependências fora de seu teste de unidade. Às vezes, você vai ter um teste como "SelectPerson", que irá selecionar uma pessoa do banco de dados e retornar um objeto Person.

Para fazer isso, você normalmente seria necessário uma dependência no banco de dados, no entanto, com objeto de zombaria você pode simular a interação com o banco de dados com um quadro de simulação, para que ele possa retornar um conjunto de dados que se parece com um voltou do banco de dados e você pode, então, teste seu código para garantir que ele lida com a tradução de um conjunto de dados para um objeto pessoa, ao invés de usá-lo para testar se uma conexão com o banco de dados existe.

Respondeu 07/08/2008 em 03:43
fonte usuário

votos
16

Várias pessoas já responderam o 'o que', mas aqui estão um par de 'porquês' rápidas que eu posso pensar de:

  1. atuação

    Porque testes de unidade deve ser rápido, testando um componente que interage com uma rede, um banco de dados ou outro recurso em tempo intensivo não precisa pagar a pena se for feito usando objetos mock. As economias de juntar-se rapidamente.

  2. Colaboração

    Se você está escrevendo uma peça muito bem encapsulado de código que precisa para interagir com código de outra pessoa (que ainda não foi escrito, ou está em sendo desenvolvido em paralelo - um cenário comum), você pode exercer o seu código com objetos mock uma vez que um interface foi acordado. Caso contrário, seu código não podem começar a ser testada até que o outro componente está terminado.

Respondeu 07/08/2008 em 03:47
fonte usuário

votos
12

Um objeto de simulação permite que você teste contra apenas o que você está escrevendo, e detalhes abstratos como acessar um recurso (disco, um serviço de rede, etc). A simulação, em seguida, permite que você fingir ser esse recurso externo, ou classe ou qualquer outra coisa.

Você realmente não precisa de um quadro objeto fictício, apenas estender a classe das funcionalidades que você não quer se preocupar em seu teste e verifique se a classe que você está testando pode usar seu simulada em vez da coisa real (passá-lo na através de um construtor ou setter ou algo assim.

A prática irá mostrar quando as simulações são úteis e quando eles não são.

EDIT: Mocking recursos é especialmente importante para que você não tem que contar com eles para existir durante o teste, e você pode zombar os detalhes de como eles existem e que eles respondem (como simulando um FileNotFoundException, ou um webservice que está faltando ou vários valores de retorno possíveis de um webservice) ... tudo sem os tempos de acesso lento envolvidos (zombeteiro irá revelar muito mais rápido do que o acesso a esses recursos no teste).

Respondeu 07/08/2008 em 03:40
fonte usuário

votos
9

Preciso de um quadro de objeto Mock?

Certamente não. Às vezes, escrevendo simulações à mão pode ser bastante tedioso. Mas para coisas simples, não é mau de todo. Aplicando o princípio de último momento responsável para os quadros de zombaria, você só deve mudar a partir de simulações escritas à mão para um quadro quando você provou para si mesmo que zombam-escrita a mão é mais problema do que vale a pena.

Se você está apenas começando começando com zombaria, pulando direto para um quadro vai pelo menos o dobro sua curva de aprendizagem (você pode dobrar uma curva?). Estruturas zombando fará muito mais sentido quando você passou alguns projectos de escrita simulações com a mão.

Respondeu 07/08/2008 em 05:14
fonte usuário

votos
6

Objeto de zombaria é uma maneira de criar um objeto de "virtual" ou zombou de uma interface, classe abstrata, ou classe com métodos virtuais. Ele permite que você tipo de embrulhar um desses em sua própria definição para fins de teste. É útil para fazer um objeto que é invocado para um determinado bloco de código você está testando.

Um popular que eu gosto de usar é chamado Moq , mas há muitos outros como RhinoMock e numerosos aqueles que não conhecem.

Respondeu 07/08/2008 em 03:40
fonte usuário

votos
5

Ele permite que você para testar como uma parte de seu projeto interage com o resto, sem construir a coisa inteira e potencialmente perder uma parte vital.

EDIT: Grande exemplo de wikipedia: Ele permite que você testar o código de antemão, como um designer de carros usa um boneco de testes para testar o comportamento de um carro durante um acidente.

Respondeu 07/08/2008 em 03:38
fonte usuário

votos
3

Outro uso é que vai deixar você testar contra outras partes do sistema que ainda não são construídos. Por exemplo, se sua classe depende de alguma outra classe que é parte de um recurso que alguém está trabalhando, você pode simplesmente pedir uma interface praticamente completa, o programa para a interface e apenas zombar os detalhes como você espera que eles para trabalhar. Então, certifique-se as suas suposições sobre a interface estavam corretos (ou enquanto você estiver desenvolvendo, ou uma vez que o recurso é completa).

Respondeu 07/08/2008 em 03:45
fonte usuário

votos
1

Se vai ou não uma plataforma de simulacros é útil depende em parte da linguagem do código que você está escrevendo. Com uma linguagem estática, você precisa fazer um esforço extra a fim de enganar o compilador a aceitar seus objetos mock como um substituto para a coisa real. Em uma linguagem dinamicamente tipada, como Python, Ruby ou Javascript, você pode geralmente apenas anexar os métodos em objeto, arbitrária ou classe e passar isso como parâmetro - para um quadro acrescentaria muito menos valor.

Respondeu 07/08/2008 em 05:32
fonte usuário

votos
0

2 recomendado estruturas zombando para testes de unidade .net são Typemock isolador e Rhino Mock.

No link abaixo você pode ver uma explicação de Typemock a respeito de porque você precisa de uma plataforma de simulacros para Testes Unitários.

Respondeu 15/10/2008 em 15:41
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more