具有非接口依赖性的AutoMocking类...框架是否支持此功能?

时间:2015-01-17 15:35:43

标签: mocking tdd moq automocking

我正在尝试模拟一个依赖于具体类的类,就像:

AutoMockContainer with support for automocking classes with non-interface dependencies

我尝试了3种不同的AutoMocking框架(包含在Moq.Contrib中的UnityAutoMoq,AutoMoq和AutoMockContainer)。这些框架都不支持为具体依赖项创建模拟。我理解Mark Seeman已经举例说明了如何使用autofac进行此操作,但我不明白为什么不支持这些框架的开箱即用。有没有一个支持这个的框架,我没有尝试过?如果没有,有人可以帮我用Unity做这个吗?

我和一位同事在没有找到答案的情况下整天反对这一点,我们将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

本质上不支持此功能。至少没有你上面提到的框架。自动模拟构建器策略代码如下所示

if (type.IsInterface || type.IsAbstract)
{
    context.Existing = GetOrCreateMock(type);
    context.BuildComplete = true;
}

Moq.Mock使用Castle Dynamic代理,它无法在非虚拟类型上生成动态代理。

单独注意: 我个人认为这是有充分理由的,因为不允许在非虚拟类型上创建代理允许开发人员经常使用虚拟类型,即抽象/接口。这也意味着基于接口的编程,有助于可测试性和可维护性,从而促进更好的设计。

如果您真的想要这些功能,下一步就是查看基于非代理的模拟对象框架,例如TypeMock,它们不是免费的。