Não brinquei o suficiente com isso e geralmente uso zombarias, mas me pergunto quais são as diferenças entre essas duas e quando usar uma ou outra na Rhino Mocks.
Atualizar:
Também encontrei a resposta para minha pergunta nas palavras de Ayende :
A diferença entre stubs e zombarias
Você pode obter a definição real desses termos neste artigo: Mocks are not stubs . Quero me concentrar na diferença do ponto de vista do Rhino Mocks.
Um mock é um objeto no qual podemos definir expectativas e que verificará se as ações esperadas realmente ocorreram. Um stub é um objeto que você usa para passar para o código em teste. Você pode configurar as expectativas para que ele atue de certas maneiras, mas essas expectativas nunca serão verificadas. As propriedades de um esboço se comportam automaticamente como propriedades normais e você não pode definir expectativas sobre elas.
Se você deseja verificar o comportamento do código em teste, você usará uma simulação com a expectativa apropriada e verificará isso. Se você deseja apenas passar um valor que talvez precise agir de uma certa maneira, mas não seja o foco deste teste, você utilizará um esboço.
IMPORTANTE: Um esboço nunca fará com que um teste falhe.
fonte
Respostas:
De acordo com isso
fonte
De um modo geral, os testes de unidade chamam funções e métodos e, em seguida, verifica se o comportamento esperado ocorreu. Essas funções e métodos podem exigir parâmetros. Usamos stubs e zombarias para satisfazer esses parâmetros. Às vezes, também podemos zombar de objetos globais.
Stubs
Um Stub é um pequeno objeto falso que seu teste pode usar como parâmetro para fazer a chamada de função funcionar. Isso nos permite verificar o comportamento da função em teste. Não permite verificar efeitos colaterais, porque o stub não tem implementação.
Zombaria
Um mock é um esboço com uma implementação. Se nossa função em teste interage com nosso objeto de simulação, podemos verificar se a simulação foi interagida como esperávamos.
Por exemplo, digamos que tínhamos um objeto Usuário simulado e que queríamos verificar se nosso método session.login funcionava, talvez desejássemos verificar se user.lastLoggedIn foi definido. Poderíamos criar um usuário simulado que implementa esse método. Quando chamamos session.login, podemos afirmar que user.lastLoggedIn tem o estado esperado.
Resumindo
Um mock é um esboço com uma implementação, que permite testar efeitos colaterais.
Essa diferença ainda é importante?
Assim como a diferença entre símiles e metáforas, a diferença entre stubs e zombarias é sutil e histórica, e talvez tenha mais a ver com as diferentes comunidades e filosofias no mundo dos testes do que com qualquer diferença técnica importante.
Eles representam abordagens ligeiramente diferentes para os testes. Um mock pode ser escrito como um esboço. Um esboço geralmente pode ser expandido para uma simulação.
Qual você deve usar?
Você pode achar que começa a criar stubs e, posteriormente, pode precisar criar zombarias completas para alguns de seus objetos. Você pode zombar de tudo à medida que avança ou zombar apenas quando necessário.
fonte
Diferença entre Mock e stub: com stub, você corrige a entrada do seu teste de unidade: para que seu teste de unidade não faça afirmações sobre stub e Stub, reescrevendo a implementação de algum método, conserte o comportamento de objetos falsos. com o Mock, você corrige a produção do seu teste de unidade: para que seu teste de unidade faça uma expectativa no seu objeto de zombaria, verificando a interação interna no seu objeto de simulação.
fonte
should have been called with
para afirmarstub
parâmetros.No caso da estrutura Moq - o método de instalação é STUB, enquanto o método Verify é Mock
fonte
Uma coisa que notei também é que, quando eu uso o MockRepository.GenerateMock, preciso definir explicitamente as expectativas em uma chamada de método específica para interceptar essa chamada. Com stubs, parece interceptar automaticamente qualquer método, desde que seja virtual.
fonte