Как создать макет, используя отражение с параметрами, используя Moq? - PullRequest
3 голосов
/ 28 сентября 2011

Я пытаюсь создать универсальный построитель тестов для генерации объектов, который я хочу использовать в тестах.Одна из вещей, которые я хочу создать - это импровизированные реализации интерфейсов.Я хочу, чтобы эти Mocks имели Strict mockbehaviour, и единственный способ установить это значение - параметр конструктора.Я использую этот код для создания макета моего интерфейса:

public object Build(Type type)
{
    if (type.IsInterface)
    {
       List<object> mockParameters = new List<object>();
       mockParameters.Add(MockBehavior.Strict);
       Mock mock = (Mock)Activator.CreateInstance(typeof(Mock<>).MakeGenericType(type), mockParameters);
       return mock.Object;
    }
}

Это дает мне ArgumentException: аргументы конструктора не могут быть переданы для макетов интерфейса.Как я могу установить MockBehavior.Strict на макет, созданный с отражением?

1 Ответ

1 голос
/ 28 сентября 2011

Ваш код может быть значительно упрощен до этого:

public T Build()
{
    if (typeof(T).IsInterface)
    {
       return new Mock<T>(MockBehavior.Strict).Object;
    }
}
...