2011-09-28 90 views
1

我想建立一个通用测试生成器来生成对象,我想在测试中使用。我想创建的一件事是模拟接口的实现。我希望这些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用我的模拟反射创建?

回答

1

您的代码可以大大简化这个:

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

谢谢,我可以看到,在这种情况下我当然能做到这一点。但是,我也需要从类型创建它。 (我编辑了这个问题来强调这一点) –

+0

@JesperKihlberg:不幸的是,我从来没有用过Moq,但是你得到的异常看起来很明显:你不能从界面创建一个严格的模拟... –

相关问题