Rhino Zomba:Como posso zombar de um método que transforma a sua entrada?
-
09-06-2019 - |
Pergunta
Eu tenho um Objecto de Acesso a Dados TransactionDao.Quando você chamar TransactionDao.Salvar(transação) eu gostaria para a definição de uma transação.IsSaved=true bandeira (esta é uma simplificação do real coisa que eu estou tentando fazer não é tão banal).Então, quando zombando de minha TransactionDao com RhinoMocks como posso indicar que ele deve transformar a sua entrada?
Idealmente, eu gostaria de escrever algo como isto:
Expect.Call(delegate {dao.Save(transaction);}).Override(x => x.IsSaved=true);
Alguém sabe como fazer isso?
Que eu tenho uma dica de como fazê-lo com a resposta abaixo especificado, o tipo de assinatura está fora, você tem que fazer algo parecido com isso:Por causa do que Mark Ingram postou, parece que a melhor resposta, mas ninguém está explicitamente dito, é para fazer isso:
public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));
Solução
Gorge,
A solução mais simples, o que eu achei, aplicado à sua pergunta é o seguinte:
Expect.Call(() => dao.Save(transaction))
.Do(new Action<Transaction>(x => x.IsSaved = true));
Assim você não precisa criar um delegado especial ou qualquer outra coisa.Basta usar a Ação que está no padrão .NET 3.5 bibliotecas.
Espero que isso ajude.Frantisek
Outras dicas
Você pode fazer isso usando o retorno de chamada:
Expect.Call(delegate {dao.Save(transaction);})
.Do(x => x.IsSaved = true);
você deve zombar da transação e fazer retornar true fo IsSaved, se você pode zombar a transação é claro.
ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);