释放模式下的测试未使用垫片方法

本文关键字:方法 未使用 测试 模式 释放 | 更新日期: 2023-09-27 18:25:10

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

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

using (ShimsContext.Create())
{
    ShimStaticClass.TheMethod<MyType>(() => instanceOfMyType);
    // ... code that uses StaticClass.TheMethod here ...
}

在调试模式下构建解决方案时,测试运行良好并通过。但是,当解决方案在发布模式中构建时,不会调用TheMethod的填隙版本,这会导致测试失败。

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

using (ShimsContext.Create())
{
    ShimForStaticClass.TheMethod<MyType>(() => 
    {
        throw new InvalidOperationException("Shim was called");
    });
    // ... code that uses StaticClass.TheMethod here ...
}

并且不会引发此异常。

我已经打开了虚假的诊断日志和嘈杂的冗长,但构建日志没有显示任何问题。

释放模式下的测试未使用垫片方法

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

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]