在释放模式下测试未使用的匀化方法

Chr*_*sgh 5 c# unit-testing mstest microsoft-fakes

在Visual Studio 2015中,我有一个测试项目,我已经添加了一个fakes程序集.

在单元测试本身中,我为静态泛型方法创建了一个垫片,该方法将实例返回到泛型类型,例如:

using (ShimsContext.Create())
{
    ShimStaticClass.TheMethod<MyType>(() => instanceOfMyType);

    // ... code that uses StaticClass.TheMethod here ...
}
Run Code Online (Sandbox Code Playgroud)

当解决方案在调试模式下构建时,测试运行正常并通过.但是,当解决方案在释放模式下构建时,调用版本的TheMethod 不会被调用,这会导致测试失败.

我知道shimmed方法没有被调用,因为我已经通过执行以下操作将其更改为抛出异常:

using (ShimsContext.Create())
{
    ShimForStaticClass.TheMethod<MyType>(() => 
    {
        throw new InvalidOperationException("Shim was called");
    });

    // ... code that uses StaticClass.TheMethod here ...
}
Run Code Online (Sandbox Code Playgroud)

并且不抛出此异常.

我已经开启了诊断日志记录和假冒的嘈杂冗长,但构建日志并未表明存在任何问题.

Ran*_*ndy 0

您是否尝试使用该MethodImpl属性并传递ImplOptions.NoInlining

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
Run Code Online (Sandbox Code Playgroud)