Rhino Mocks: Как я могу смоделировать метод, который преобразует его вход? - PullRequest
2 голосов
/ 12 сентября 2008

У меня есть объект доступа к данным TransactionDao. Когда вы вызываете TransactionDao.Save (транзакция), я бы хотел, чтобы он установил флаг транзакции. IsSaved = true (это упрощение, которое я пытаюсь сделать, не так банально) Так, когда я высмеиваю мой TransactionDao с помощью RhinoMocks, как я могу указать, что он должен преобразовать свой ввод?

В идеале я хотел бы написать что-то вроде этого:

Expect.Call(delegate {dao.Save(transaction);}).Override(x => x.IsSaved=true);

Кто-нибудь знает, как это сделать?


Хотя я получил подсказку, как это сделать из ответа, указанного ниже, фактическая сигнатура типа отключена, вы должны сделать что-то вроде этого: Из-за того, что написал Марк Ингрэм, кажется, что лучший ответ, хотя никто явно не сказал это, должен сделать это:

public delegate void FakeSave(Transaction t);
...
Expect.Call(delegate {dao.Save(t); }).Do( new FakeSave(delegate(Transaction t2) { t.IsSaved = true; }));

Ответы [ 3 ]

4 голосов
/ 15 мая 2009

ущелье,

Самое простое решение, которое я нашел, применительно к вашему вопросу:

Expect.Call(() => dao.Save(transaction))
    .Do(new Action<Transaction>(x => x.IsSaved = true));

Так что вам не нужно создавать специального делегата или что-то еще. Просто используйте Action из стандартных библиотек .NET 3.5.

Надеюсь, это поможет. Франтишек

1 голос
/ 12 сентября 2008

Вы можете сделать это с помощью обратного вызова Do:

Expect.Call(delegate {dao.Save(transaction);})
    .Do(x => x.IsSaved = true);
0 голосов
/ 12 сентября 2008

вы должны смоделировать транзакцию и сделать ее верной для IsSaved, если вы, конечно, можете смоделировать транзакцию.

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
...