У меня есть интерфейс, который возвращает void в некоторых функциях, над которыми я хотел бы высмеять и поинтересоваться, как это правильно сделать. На данный момент у меня есть следующее:
var mocks = new MockRepository();
var mockedInterface = mocks.CreateMock<IMyInterface>();
Expect.Call(mockedInterface.FunctionThatReturn(param1, param2)).Return(Something);
mockedInterface.FunctionReturningVoid(param3, param4);
mocks.ReplayAll();
// Some assert and other stuff
mocks.VerifyAll();
Это правильный способ сделать это? Я думаю, это выглядит странно, поскольку вы не обрабатываете две функции одинаково. Я хотел бы написать:
var mocks = new MockRepository();
var mockedInterface = mocks.CreateMock<IMyInterface>();
Expect.Call(mockedInterface.FunctionThatReturn(param1, param2)).Return(Something);
Expect.Call(mockedInterface.FunctionReturningVoid(param3, param4)); // This doesn't work.
mocks.ReplayAll();
// Some assert and other stuff
mocks.VerifyAll();
Но это не работает в строке 4. Я нашел блог, в котором говорится, что вы можете использовать лямбды (или делегировать), например
Expect.Call(() => mockedInterface.FunctionReturningVoid(param3, param4)); // This doesn't work.
. Но это, похоже, не работает и для меня . Наличие Expect.Call
позволяет легко идентифицировать фиктивные функции, и именно поэтому мне это нужно. Я получаю следующую ошибку компиляции: «Невозможно преобразовать лямбда-выражение в тип« объект », потому что это не тип делегата».
Итак, как это сделать?
ОБНОВЛЕНИЕ: Добавлена информация об ошибке компиляции.