Posso definir expectativas sobre os tipos de toupeiras criados com Moles?
-
15-11-2019 - |
Pergunta
Preciso não apenas trocar a implementação, mas também adicionar a verificação necessária para ter certeza de que determinados métodos foram chamados na ordem correta.Posso imaginar que algo como Mole + Mock me daria essa opção.Alguém sabe se Moles tem esse recurso?
Este código deve ser útil:
// Verify if Dispose was called
MDisposableObject.Constructor = delegate(DisposableObject instance)
{
MDisposableObject mole = new MDisposableObject(instance);
...
// This doesn't work
//objectContext.Expects(i => i.Dispose()).ToBeCalledOneTime();
};
Solução
Moles pretendem dar tocos (e não zomba) para tudo, mesmo para métodos estáticos ou selados.Está escrito no manual do Moles que eles não visam o aspecto de zombaria como outros frameworks de zombaria:eles oferecem isolamento, não zombarias.Se quiser verificar as ligações dos seus Moles, você terá que fazer do seu próprio jeito.Por exemplo:
bool called = false;
MDisposableObject.Constructor = (@this) =>
{
var mole = new MDisposableObject(@this)
{
Dispose = () =>
{
Assert.IsFalse(called);
called=true;
//if you want to call the original implementation:
MolesContext.ExecuteWithoutMoles(() => (@this).Dispose());
//or do something else, even nothing
}
};
};
Apenas Isolador Typemock (poderoso, mas caro) e Apenas Mock do Telerik (novo concorrente, também não gratuito) permite recursos de simulação para tudo.
Se você tiver algumas interfaces, delegados e métodos virtuais, use uma estrutura de simulação gratuita como Moq ou RhinoMocks.
Um aviso sobre meu exemplo:até agora não descobri como chamar o construtor original, quero dizer algo como
var mole = new SDisposable();
(@this) = mole;
new MDisposable(mole) {...};
Na verdade, pelo que li no msdn, não é possível...Espero que os próximos lançamentos permitam isso.