У меня есть интерфейс с методом следующим образом:Mocking общих методов в Moq без указания T
public interface IRepo
{
IA<T> Reserve<T>();
}
Я хотел бы издеваться классом, который содержит этот метод без указания методы настройки для каждого типа он мог для использования. В идеале я бы просто хотел вернуть new mock<T>.Object
.
Как это достичь?
Кажется, мое объяснение было неясным. Вот пример - сейчас это возможно, когда я указать Т (здесь, строка):
[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.
}
Некоторые методы из тестируемый объект может вызвать резерв для трех или четырех разных типов. Если мне нужно настроить все типы, я должен написать много кода установки для каждого теста. Но в одном тесте я не беспокоюсь обо всех них, мне просто нужны ненулевые штудированные объекты, кроме тех, которые я фактически тестировал (и для которых я с радостью напишу более сложную настройку).
Я пробовал это, но я продолжаю получать «тип или пространство имен« Т »не может быть найдено», когда я пытаюсь скомпилировать это. – Wilbert
@Wilbert, какую версию .NET Framework вы используете? –
Хорошо, различие, конечно, в том, что вы положили все это в общую функцию. Мне нужно поставить его в не-общую функцию. – Wilbert