1

我正在开发我的第一个 ASP .NET MVC 项目,在此之前我只将 Rhino.Mocks 用于桌面应用程序。

已经有一段时间了,所以我决定找出现在在该领域使用的东西。在阅读了一些对Moq
的 赞美之后,我决定接受它。 (我喜欢某些人所说的 lambda 误用和过度使用)。

然而,我也听到了对MvcContrib TestHelper框架的赞誉,它似乎依赖于 Rhino.Mocks

我需要知道TestHelper 是否强制我使用 Rhino.Mocks。我不想在我的测试中混合两个不同的模拟框架,所以如果 TestHelper 是 Rhino 特定的,我将不得不决定要么

  • 为了 TestHelper 切换到 Rhino.Mocks(可悲但可能);
  • 为了使用起订量而放弃 TestHelper(不太可能)。

我真的希望 TestHelper 在其公共 API 中独立于 Rhino.Mocks,但我不能 100% 确定。
有人可以(不)确认吗?

4

2 回答 2

3

我不确定这是什么时候改变的,但 TestControllerBuilder 现在需要一个可选IMockFactory<T>参数。我发现的问题是,如果你不传递一个,它首先默认为 RhinoMocks,然后是 Moq,两者都作为代理。如果您像我一样使用 StructureMap,它将始终使用 RhinoMocks。我真的希望有某种标志来告诉 TestControllerBuilder 使用哪一个。

要强制构建器使用 Moq,您可以传入一个IMockFactory<T>反映回 Moq 的新类。在内部,MvcContrib 有一个类可以完美地做到这一点,但它不能公开访问。我不知道他们为什么不公开它。

我没有创建自己的实现IMockFactory<T>,而是选择深入研究 MvcContrib 代码并将MoqFactoryMoqProxy类复制/粘贴到我自己的解决方案中,并将它们传递给 TestControllerBuilder。感觉真的很脏,但它完成了工作,让我可以尽情使用最小起订量。

于 2012-06-29T17:15:24.910 回答
2

我需要知道 TestHelper 是否强制我使用 Rhino.Mocks

是的,它确实要求您使用 Rhino Mocks。TestHelperBuilder 类上的所有属性,如 Request、Response、Session、HttpContext ……都被 Rhino Mocks 存根,等待你对它们写期望。

于 2011-06-28T06:18:51.043 回答