Как передать метод в качестве параметра без объявления делегата в .NET - PullRequest
3 голосов
/ 13 мая 2009

Независимо от того, как я стараюсь, я не могу имитировать чистый синтаксис Rhino Mocks, не объявив делегата.

Пример:

Expect.Call(service.HelloWorld("Thanks"))

У вас есть идеи, как это сделать?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 13 мая 2009

Вы можете использовать делегат Action, предоставляемый в более новых версиях .NET

void Execute(Action action) {
    action();
}

void Test() {
    Execute(() => Console.WriteLine("Hello World!"));
}
6 голосов
/ 13 мая 2009

Используя синтаксис Lambda в 3.5, вы можете получить аналогичный синтаксис.

public void Call(Action action)
{
    action();
}

Expect.Call(() => service.HelloWorld("Thanks"));

Moq - это фреймворк, использующий лямбда-синтаксис для фальсификации.

var mock = new Mock<IService>();
mock.Setup(service => service.HelloWorld("Thanks")).Returns(42);
0 голосов
/ 19 марта 2011

В Rhino Mocks он фактически вызывает метод. В это время объект находится в режиме настройки, и когда вы вызываете его, он записывает параметры и устанавливает ожидания. Вот почему вы можете уйти от синтаксиса делегата. К сожалению, во многих других случаях это невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...