Pergunta

Ultimamente, tenho usado Rhinomocks, mas continuo correndo em um problema. Se eu entrar no depurador e passar o código enquanto uma simulação estiver no modo de registro, acabo obtendo uma exceção ao longo das linhas de:

System.InvalidOperationException: Previous method 'SuchAndSuch.ToString();'  
requires a return value or an exception to throw.

Mas se eu executar o mesmo código sem entrar no depurador, ele será executado com sucesso e criará a simulação.

Tenho certeza de que o motivo disso é que o depurador chama o tostring () em objetos para exibi -los nos habitantes locais e em outras janelas de relógios. Mas como a simulação está no modo de registro Rhinomocks considera uma chamada para o ToString () como uma configuração de expectativas que não estão completamente corretamente. Obviamente, isso só acontece com zombarias parciais nas classes de concreto. Zombares contra interfaces não exibem esse comportamento.

Outras pessoas se deparam com esse problema? Existe algum remédio simples? Outras estruturas como MOQ ou TypeMock têm esse problema?

Obrigado,

~ Justin

Foi útil?

Solução

Lembro -me de ter um problema semelhante com o NMOCK há muitos anos. Basicamente, esse problema ocorre exatamente porque o depurador chama e exibe propriedades usando o ToString Método (a menos que você use DebuggerDisplayAttribute ou similar).

Isso pode ser particularmente problemático se você usar zombares estritas Porque eles apenas permitem que você invoca um membro o número especificado de vezes, e o depurador interfere nisso. Usando zombares soltas aborda isso (e muitos outros) problemas.

Você também pode querer se afastar do mecanismo de recorde/reprodução de rinocerontes e começar a usar o mais novo e muito melhor Sintaxe Lambda.

O MOQ usa a sintaxe Lamda (quase) exclusivamente, e nunca tive esses problemas com ela - mas, novamente, não depurei muito hoje em dia, pois os testes de unidade se tornaram um substituto para depurar.

Ainda outro remédio é simplesmente esconder o Automóveis e Habitantes locais Windows depurador.

Outras dicas

Como Mark sugeriu, esse problema deve desaparecer se você parar de usar a abordagem record-replay-verify e começar a usar stubs com a abordagem AAA recomendada (organize, aja, afirme).

Eu tentei explicar a diferença e como fazer os dois com zombares de rinocerontes neste Postagem do blog.

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