Носорог издевается:Как я могу создать макет метода, который преобразует входные данные?

StackOverflow https://stackoverflow.com/questions/59396

  •  09-06-2019
  •  | 
  •  

Вопрос

У меня есть объект доступа к данным TransactionDao.Когда вы вызываете TransactionDao.Save(transaction), я бы хотел, чтобы он установил флаг транзакции.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; }));
Это было полезно?

Решение

Ущелье,

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

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

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

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

Другие советы

Вы можете сделать это, используя обратный вызов Do:

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

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

ITransaction transaction = _Mocker.dynamicMock<ITransaction>;
Expect.Call(transaction.IsSaved).IgnoreArguments.Return(true);
_mocker.ReplayAll();
dao.Save(transaction);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top