在Visual Studio 2015中,我有一个测试项目,我已经添加了一个伪装配。
在单元测试中,我为静态泛型方法创建了一个shim,它将实例返回到泛型类型,例如:
using (ShimsContext.Create())
{
ShimStaticClass.TheMethod<MyType>(() => instanceOfMyType);
// ... code that uses StaticClass.TheMethod here ...
}
当解决方案在调试模式下构建时,测试运行正常并通过。但是,当解决方案以发布模式构建时,TheMethod 的填充版本不会被调用,这会导致测试失败。
我知道shimmed方法没有被调用,因为我已经通过执行以下操作将其更改为抛出异常:
using (ShimsContext.Create())
{
ShimForStaticClass.TheMethod<MyType>(() =>
{
throw new InvalidOperationException("Shim was called");
});
// ... code that uses StaticClass.TheMethod here ...
}
并且不会抛出此异常。
我已经开启了虚假的诊断日志记录和嘈杂的详细程度,但构建日志并未表明存在任何问题。
答案 0 :(得分:0)
您是否尝试使用MethodImpl
属性并传递ImplOptions.NoInlining
?
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]