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; }));
Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top