我有以下类,它使用构造函数注入:
public class Service : IService
{
public Service(IRepository repository, IProvider provider) { ... }
}
对于此类中的大多数方法,我只是为IRepository
andIProvider
和构造Moq 模拟Service
。但是,该类中有一个方法会调用同一类中的多个其他方法。为了测试这个方法,而不是一起测试所有这些方法,我想测试该方法是否正确调用这些方法并正确处理它们的返回值。
最好的方法是模拟Service
. 我以前用 Moq 模拟过具体的课程没有问题。我什至用 Moq 模拟了需要构造函数参数的具体类,没有问题。然而,这是我第一次需要将模拟参数传递给模拟对象的构造函数。自然,我尝试这样做:
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
's 的构造函数采用像int
s 和string
s 这样的简单参数,这很好用,但如果它采用我正在模拟的接口,则不行。你怎么做到这一点?