如何使用带Moq参数的反射来创建模拟?
问题描述:
我想建立一个通用测试生成器来生成对象,我想在测试中使用。我想创建的一件事是模拟接口的实现。我希望这些Mock拥有严格的mockbehaviour,并且设置afaik的唯一方法是通过构造函数参数。我使用这个代码来创建我们的界面模拟:如何使用带Moq参数的反射来创建模拟?
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用我的模拟反射创建?
答
您的代码可以大大简化这个:
public T Build()
{
if (typeof(T).IsInterface)
{
return new Mock<T>(MockBehavior.Strict).Object;
}
}
谢谢,我可以看到,在这种情况下我当然能做到这一点。但是,我也需要从类型创建它。 (我编辑了这个问题来强调这一点) –
@JesperKihlberg:不幸的是,我从来没有用过Moq,但是你得到的异常看起来很明显:你不能从界面创建一个严格的模拟... –