统一+拦截+假动作=大火球



我在使用新的Fakes框架(以前是pex &摩尔)

当我试图创建假的统一拦截库时,它导致我的单元测试在调试时运行良好,但因

而中断

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

问题是为什么?为什么在调试和发布中会有不同的行为?在调试时,单元测试通过了,但是当我选择运行它时,出现了上述异常。

如果你伪造Unity,那你就做错了!你需要伪造Unity的事实意味着你正在滥用Unity作为服务定位器(反模式)。相反,你不应该在你的应用程序中调用Unity,只在你的合成根中使用它。这可以防止你不得不假装Unity。

永远记住编程的直觉法则:如果感觉别扭,那你就做错了。

如果我不得不猜测(我个人从未将拦截与伪造结合起来),我会说你有两个框架都在IL级别上摆弄东西,而这只是不能很好地结束。

Fakes的工作原理是(从这里的阴影记忆中)创建一个复制的"shim填充"变体的汇编你正在伪造,和统一拦截在拦截点上编织IL -混合在一起,我并不惊讶,它创建了一个无效的IL序列。

修复它吗?呕……不要在任何你正在执行拦截的程序集上使用假货?在这些情况下依赖更传统的mock框架。

最新更新