Насмешливые родовые методы - PullRequest
18 голосов
/ 10 декабря 2010

Предположим, у меня есть некоторый интерфейс с универсальным методом и без параметров:

public interface Interface {
   void Method<T>();
}

Теперь я хочу реализовать макет для этого класса (я использую Moq) и хочу смоделировать этот метод для какого-то конкретного типа - скажем, я высмеиваю Method<String>() вызовы.

mock = new Mock<Interface>();
mock.Setup(x => x.Method ????).Returns(String("abc"));

Идея ???? должна быть ясной - это лямбда-выражение должно обрабатывать случай, когда T в Method<T> на самом деле String.

Есть ли способ, которым я могу добиться желаемого поведения?

Ответы [ 2 ]

20 голосов
/ 10 декабря 2010

Просто:

mock.Setup(x => x.Method<string>()).Returns("abc");

Также убедитесь, что ваш метод действительно что-то возвращает, так как в настоящее время тип возвращаемого значения определен как void:

public interface Interface
{
    string Method<T>();
}

class Program
{
    static void Main()
    {
        var mock = new Mock<Interface>();
        mock.Setup(x => x.Method<string>()).Returns("abc");

        Console.WriteLine(mock.Object.Method<string>()); // prints abc
        Console.WriteLine(mock.Object.Method<int>()); // prints nothing
    }
}
5 голосов
/ 10 декабря 2010

Я сам не использовал Moq, но ожидал:

mock.Setup(x => x.Method<string>());

(Обратите внимание, что у вашего метода-образца тип возврата void, поэтому он не должен ничего возвращать ...

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