Pergunta

Acabei de assistir isso engraçado Vídeo do YouTube sobre testes unitários (é Hitler com legendas falsas criticando sua equipe por não fazer bons testes de unidade - pule se você tiver problemas de humor) onde os esboços são duramente criticados.Mas não entendo o que há de errado com os stubs.

Ainda não comecei a usar uma estrutura de simulação e não comecei a sentir dor por não usá-la.

Estou prestes a sofrer um mundo em algum momento no futuro, tendo escolhido esboços manuscritos e falsificações em vez de simulações (como Rhinomock etc.)? (usando a taxonomia de Fowler)

Quais são as considerações para escolher entre um esboço simulado e um esboço manuscrito?

Foi útil?

Solução

Não há nada de errado com os stubs, há espaço para stubs, zombarias ... e espiões. Todos são "duplas de teste", mas com propósitos diferentes, conforme explicado em Zombares e stubs não são espiões:

...] Antes de seguir em frente, gostaria de esclarecer e definir alguns termos em uso aqui, que eu descobri originalmente em Gerard Meszaros ' Livro de padrões Xunit.

  • Um objeto fictício é um objeto de espaço reservado passado para o sistema em teste, mas nunca usado.
  • Um stub de teste fornece o sistema em teste com entrada indireta
  • Um Spy de teste fornece uma maneira de verificar se o sistema em teste executou a saída indireta correta
  • Um objeto simulado fornece o sistema em teste com entrada indireta e uma maneira de verificar a saída indireta

...] E você pode deixar este gráfico útil guiar suas decisões:

alt text

PS: Mockito - a nova estrutura simulada no bloco vale a pena ler também.

Outras dicas

Eu uso a seguinte terminologia (introduzida por Roy Osherove, o autor de The Art of Unit-Testing):

UMA falso é chamado a Stub Se você disser isso para fingir algo, caso um método seja chamado com esses e esses parâmetros. Mas se você também verificar se essa chamada realmente ocorreu ou ocorreu exatamente n vezes, então esse falso é chamado de zombar. Resumidamente. Uma farsa é um stub, a menos que você ligue para verificar () e, em seguida, é uma simulação.

Obviamente, você precisará usar stubs em alguns casos e zombares em outros. Portanto, criticar Stubs provavelmente está errado e usar stubs exclusivamente provavelmente também está errado.

Se você não começou a usar uma estrutura de zombaria (termo alternativo: estrutura de isolamento), você deve ficar de olho neles e reavaliar suas opções com frequência. Eu fui de zombarias manuais para NMOCK2 para MOQ muito rapidamente. Aqui está um interessante votação de programadores que mostram o que eles usam. Mingas/stubs manuais são minoria, mas não são incomuns.

As zombares são muito mais fáceis de colocar. Eles são uma instância real da sua classe, pré-picada com a capacidade de substituir a ação de qualquer método com o mínimo de caldeira.

Existem muitas pequenas considerações, como: se você não quiser lidar com nenhum dos métodos, pode fazê-lo como um não-Op ou falhar no teste-sua escolha-mas de qualquer maneira praticamente nenhum código .

Quanta caldeira você recebe quando tira uma aula? Como você lida com isso se sua classe for final? Você pega truques para colocar seu stub no caminho de classe primeiro ou usa fonte diferente?

Eu recomendo apenas começar com as zombarias-é mais fácil por toda parte.

Não há nada de errado em usar stubs em vez de zombares.

Se você deseja obter técnicos, as zombares são objetos "inteligentes" com expectativas que podem ser verificadas. Os stubs são objetos fictícios que retornam valores predefinidos. Ver Mochinhas não são stubs.

Mas muitas pessoas (inclusive eu) preferem fazer testes estaduais com stubs em vez de testes de comportamento com zombarias. Você injeta um stub na classe em teste, chama um método e verifica o estado da classe em teste. Ele tende a proporcionar testes menos quebradiços do que afirmar que os internos da classe chamavam o método x de um objeto simulado com o argumento Y.

Eu não acho que você está em um mundo de mágoa. Se você ainda não começou a sentir a dor, provavelmente ainda não precisa de uma estrutura de isolamento/zombaria. Quando e se o fizer, ter stubs/falsificações manuscritas não vai doer nada.

Se você tiver muitas interfaces ou se suas interfaces tiverem muitos métodos, uma estrutura de isolamento/zombaria poderá economizar muito tempo com os stubs de codificação manual.

Eu gosto MOQ muito; Acho mais fácil de usar do que rinocerontes para criar stubs.

Mocks and stubs são usados ​​para realizar um teste de unidade real.Você apenas zomba de todas as dependências e testa sua classe isoladamente.

Atualmente estou usando Quantidade mínima para zombar e stubbing.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top