У меня есть интерфейс со следующим способом:
public interface IRepo
{
IA<T> Reserve<T>();
}
Я хотел бы высмеять класс, содержащий этот метод, без указания методов установки для каждого типа, для которого он может быть использован. В идеале я бы просто хотел вернуть new mock<T>.Object
.
Как мне это достичь?
Кажется, мое объяснение было неясным. Вот пример - это возможно прямо сейчас, когда я укажу T (здесь, строка):
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo>();
mock.Setup(pa => pa.Reserve<string>()).Returns(new Mock<IA<string>>().Object);
}
То, что я хотел бы достичь, выглядит примерно так:
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo>();
mock.Setup(pa => pa.Reserve<T>()).Returns(new Mock<IA<T>>().Object);
// of course T doesn't exist here. But I would like to specify all types
// without having to repeat the .Setup(...) line for each of them.
}
Некоторые методы тестируемого объекта могут быть зарезервированы для трех или четырех разных типов. Если мне нужно настроить все типы, я должен написать много кода установки для каждого теста. Но в одном тесте я не беспокоюсь обо всех них, мне просто нужны ненулевые издеваемые объекты, кроме тех, которые я фактически тестирую (и для которых я с радостью напишу более сложную настройку).