У меня есть следующий класс, который использует инъекцию конструктора:
public class Service : IService
{
public Service(IRepository repository, IProvider provider) { ... }
}
Для большинства методов этого класса я просто создаю Moq mocks для IRepository
и IProvider
и создаю Service
. Однако в классе есть один метод, который вызывает несколько других методов в одном классе. Для тестирования этого метода вместо того, чтобы тестировать все эти методы вместе, я хочу проверить, правильно ли метод правильно эти методы и правильно ли обрабатывает возвращаемые значения.
Лучший способ сделать это - издеваться над Service
. Я издевался над конкретными классами с Moq, прежде чем без проблем. Я даже издевался над конкретными классами, которые без аргументов требуют аргументов конструктора с Moq. Тем не менее, это первый раз, когда мне нужно передать аргументы mocked в конструктор для издевающегося объекта. Естественно, я пытался сделать это следующим образом:
var repository = new Mock<IRepository>();
var provider = new Mock<IProvider>();
var service = new Mock<Service>(repository.Object, provider.Object);
Однако это не работает. Вместо этого я получаю следующую ошибку:
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException : Can not instantiate proxy of class: My.Namespace.Service.
Could not find a constructor that would match given arguments:
Castle.Proxies.IRepository
Castle.Proxies.IProvider
Это отлично работает, если конструктор Service
принимает простые аргументы, такие как int
и string
s, но не если он принимает интерфейсы, которые я издеваюсь. Как вы это делаете?