Unity + Interception + Fakes = Big Ball of Fire

时间:2013-03-15 20:50:11

标签: c# unity-container microsoft-fakes unity-interception policy-injection

我在使用新的Fakes框架(以前的pex& moles)让Unity玩得很好时遇到了麻烦

当我尝试创建Unity拦截库的伪造时,它导致我的单元测试在调试时运行正常,但是打破了

  

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

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

2 个答案:

答案 0 :(得分:1)

如果你伪造Unity,你做错了!你需要伪造Unity的事实意味着你正在滥用统一作为Service Locator (anti-pattern)。相反,您不应该在应用程序中调用Unity,只能在Composition Root内使用它。这可以防止您完全伪造Unity。

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

答案 1 :(得分:0)

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

假货的工作方式(从这里的阴暗记忆中创建)创建一个复制的“垫片填充”变体你正在伪装的组件,并且统一拦截会在拦截点上编织IL - 将两者混合在一起我就是毫不奇怪,它创造了一个无效的IL序列。

修复它? Oof ...不要在你正在进行拦截的任何装配上使用Fakes?在这些情况下依靠更传统的模拟框架。