0

我无法让 Unity 与新的 Fakes 框架(以前的 pex 和 moles)配合得很好

当我尝试创建统一拦截库的伪造品时,它导致我的单元测试在调试时运行良好,但会中断

InvalidProgramException - 公共语言运行时检测到无效程序。

问题是为什么?为什么调试与发布的行为不同?单元测试在调试时通过,但在我选择运行它时会因上述异常而中断。

4

2 回答 2

1

如果你在伪造 Unity,那你就做错了!您需要伪造 Unity 的事实意味着您正在滥用 Unity 作为服务定位器(反模式)。相反,您不应在应用程序中调用 Unity,而只能在您的Composition Root中使用它。这可以防止您完全伪造 Unity。

永远记住编程的直觉规则:如果感觉很尴尬,那就是你做错了。

于 2013-03-16T11:21:13.187 回答
0

如果我不得不猜测(从不亲自将拦截与假货结合起来),我会说你有两个框架都在 IL 级别摆弄东西,而且这不能很好地结束。

假货的工作原理是(从这里的阴暗记忆中)创建您正在伪造的组件的重复“垫片填充”变体,并且统一拦截在拦截点上进行 IL 编织 - 将这两者混合在一起,我并不感到惊讶它创建了无效的 IL 序列。

修复它?Oof...不要在您正在执行拦截的任何程序集上使用Fakes?在这些情况下依赖更传统的模拟框架。

于 2013-03-15T22:21:03.030 回答