5

我正在尝试使用 Moq 3.0 模拟 IUnityContainer

我得到一个 BadImageFormatException,但在调试时没有。从外观上看,我不是唯一遇到这个问题的人。

这里

它是 Moq 的注册问题

这里

我只是好奇是否有人找到了解决方案...我发现的最接近的是使用 Roy Osherove 的 RhinoMock 的一个不错的解决方案

这里

但我真的很喜欢起订量!所以我真的不想切换到 Rhino Mock 但如果必须的话我会的

提前致谢!

4

5 回答 5

4

你没有。

模拟容器的唯一原因是您是否正在传递它。这是一种反模式。

相反,您希望在应用程序的入口点或Composition Root处组合整个对象图。

如果您需要动态创建实例,请使用Automatic Factories

对于您的测试,您可以构造被测对象并将模拟对象传递给构造函数,或者在测试中创建一个新容器并使用它注册模拟对象。

于 2011-09-16T04:16:32.833 回答
2

你需要一个成熟的模拟对象吗?你能简单地实现一个假货吗?即,实现 IUnityContainer 接口的测试实例化并覆盖您需要与之交互的方法?

我不止一次落入陷阱,因为我有一个模拟对象库,我应该用它来隔离系统中的每个依赖项。通常情况下,做一些简单的事情会让我得到我想要的结果,而挫败感要低得多。

于 2009-03-23T22:59:56.127 回答
1

您是否尝试过模拟 UnityBaseContainer 或 UnityContainer 而不是 IUnityContainer,比如Rory Primrose 的这篇文章?他正在处理 RhinoMocks 但因为我认为这个问题与 Moq 对 Castle 的内部使用有关,你也许可以通过这种方式解决问题。

于 2009-11-09T14:05:58.907 回答
0

由于这个问题我不模拟IUnityContainer,我使用一个真实的实例来UnityContainer代替。这并不理想,但我可以通过检查容器是否可以适当地解析类型来测试注册。

当您使用它来解析类中的类型时,您可以模拟和使用IServiceLocator,或者更好的是,使用在容器中注册工厂并使用它。

于 2009-11-08T13:41:05.043 回答
0

你是在 Win x64 上运行这个吗?看看这个页面。它清楚地表明。

当动态链接库(.dll 文件)或可执行文件(.exe 文件)的文件格式不符合公共语言运行库预期的格式时,将引发此异常。

此外,发现此博客条目建议将编译标志从 Any CPU 更改为 x86 可能有助于解决这个问题。http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

编辑:

也看看这个SO 线程。看看你的构建配置管理器。

于 2011-09-18T08:28:42.080 回答