As diferentes estruturas têm diferentes públicos-alvo?
Sim. Algumas estruturas, como Microsoft Moles , TypeMock Isolator e JustMock , permitem que você possa zombar de qualquer coisa. Essas ferramentas de simulação geralmente são melhores para os desenvolvedores que desejam usá-las no código legado existente, pois pode não ser possível refatorá-lo para um design mais testável. *
Tradicionalmente, os projetos testáveis significam que a base de código precisa fazer uso liberal de interfaces, classes abstratas, métodos virtuais, classes não seladas etc. Portanto, as estruturas de simulação tradicionais como Moq e RhinoMocks funcionam bem com o código desenvolvido usando Test Driven Development, Injection Dependency e outros conceitos. A propósito, eu recomendo o uso da Injeção de Dependência à medida que você ganha muito mais do que apenas código testável, mas também código mais sustentável.
Que fatores devo considerar ao escolher qual estrutura é adequada para minha situação?
- Atividade de desenvolvimento. Ferramentas como Moq e RhinoMocks são muito ativas e populares e, portanto, atualizadas.
- Vs de código aberto. Comercial . Considere os vários prós e contras típicos dessa comparação. Custo, Suporte, etc ...
- Maturidade. Quão nova é a ferramenta. Está na versão beta (como o Microsoft Moles) ou teve vários lançamentos estáveis? Por exemplo, eu gosto de Moles para código legado, mas existem vários erros que precisam ser corrigidos e haverá uma espera antes que eles sejam resolvidos (próxima versão, novembro de 2011).
- Documentação. Existem vários livros e blogs que cobrem testes de unidade, zombaria, zombaria automática etc. Além disso, qual é a documentação da ferramenta?
- Sintaxe . Cada ferramenta tem sua própria maneira de dizer a mesma coisa. Veja qual é o melhor para você.
- Velocidade . As ferramentas que usam a criação de perfil CLR (TypeMock, Moles, JustMock) podem ser muito mais lentas que as tradicionais (Moq, RhinoMocks). Essa penalidade de velocidade pode ser um problema, pois você realiza muitos testes de unidade. A regra geral é que, se um teste demorar mais de 1/10 por segundo, é muito lento.
- Suporte da comunidade . Outros desenvolvedores estão escrevendo outras ferramentas que se estendem (ou funcionam como complemento) à ferramenta de simulação? Há um projeto Moq.Contrib que adiciona uma capacidade de zombaria automática ao Moq (que ajuda a acelerar o tempo de gravação do teste). Melhor ainda, há o AutoFixture , AutoFixture.AutoMoq, AutoFixture.AutoRhinoMocks, que também permite a simulação automática, além da criação de variáveis anônimas.
* Consulte Trabalhando efetivamente com o código herdado , para obter maneiras de refatorar lentamente o código sem testes para o código que pode ser usado com as ferramentas tradicionais de teste (e zombaria).