Подтвердить что ты не робот

Издевательские общие методы

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

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

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

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

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

Есть ли способ достичь желаемого поведения?

4b9b3361

Ответ 1

Просто:

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
    }
}

Ответ 2

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

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

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