1

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

AutoMockContainer 支持具有非接口依赖项的自动模拟类

我尝试了 3 种不同的 AutoMocking 框架(Moq.Contrib 中包含的 UnityAutoMoq、AutoMoq 和 AutoMockContainer)。这些框架都不支持为具体依赖项创建模拟。我知道 Mark Seeman 给出了一个关于如何使用 autofac 执行此操作的示例,但我不明白为什么这些框架不支持开箱即用。有没有我没有尝试过的支持这个的框架?如果没有,有人可以帮我用 Unity 做到这一点吗?

我和一位同事整天都在为此苦苦挣扎,但没有找到答案,我们将不胜感激。

4

1 回答 1

1

本质上这是不支持的。至少不是您上面提到的框架。Auto Mocking builder策略代码如下

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

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

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

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

于 2015-07-27T04:02:39.733 回答