【问题标题】:ShimNotImplementedException after upgrading Visual Studio 2013 and Microsoft Fakes v12升级 Visual Studio 2013 和 Microsoft Fakes v12 后的 ShimNotImplementedException
【发布时间】:2015-10-19 05:09:27
【问题描述】:

我们在 Visual Studio 2013 中使用 Microsoft Fakes。更新到 Visual Studio 2013 Update-4 或 Update-5 后,我们在测试中得到了ShimNotImplementedException

我们有followed instructions found in other SOF questions 并关闭了Microsoft.QualityTools.Testing.Fakes 引用中的SpecificVersion。这允许编译,但运行时测试仍然失败。

【问题讨论】:

    标签: visual-studio unit-testing visual-studio-2013 microsoft-fakes


    【解决方案1】:

    我们需要解决这个问题的提示在 MSDN forums 中找到。

    根本问题是遗留测试没有定义具体的方法 在基于代码使用的 ShimXXX 对象上。在版本 11 下 一切都很好;版本 12 是另一回事。

    ShimNotImplementedException 的堆栈跟踪提供了有关缺少的属性/方法的所需信息:

    Microsoft.QualityTools.Testing.Fakes.Shims.ShimNotImplementedException
    at $Func`2NotImplementedf5b9281e-32b0-4bf3-9079-6a54470670de.Invoke(SiteContext arg1)
    at Sitecore.Sites.SiteContext.get_Database() //THIS IS THE PROBLEM PROPERTY
    at Sitecore.Ecommerce.ShopContext..ctor(SiteContext innerSite)
    at ActiveCommerce.UnitTest.ProductStockManagerTests.get_MockShopContext()
    at ActiveCommerce.UnitTest.ProductStockManagerTests.GetAvailability_AlwaysInStock()
    

    将缺失的属性添加到我们的 shim 构造中解决了这个问题:

            return new Sitecore.Ecommerce.ShopContext(new ShimSiteContext
            {
                PropertiesGet = () => new NameValueCollection(),
                DatabaseGet = () => null //ADDING THIS SOLVED THE ISSUE
            });
    

    【讨论】:

      【解决方案2】:

      在使用 Visual Studio 2015 将我们的几个项目从 .NET 4 升级到 .NET 4.5.2 后,我遇到了类似的问题。突然之间,之前通过的几个测试开始失败。共同点是所有测试都使用 Shims 来模拟注册表访问。

      似乎发生的事情是 Dispose 方法的处理发生了一些变化。最初我没有在 RegistryKey 垫片上实现 Dispose 方法。这似乎不会导致在 .NET 4 下运行任何问题。但是在切换到 4.5.2 之后,它一直被隐式调用。

      解决方案很简单:我只是为 Dispose 添加了一个存根。

      Microsoft.Win32.Fakes.ShimRegistryKey.AllInstances.Dispose = (key) => { };
      

      现在测试再次通过。

      请注意,将其设置为 NULL 并没有解决它。必须有方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-01
        • 2018-01-10
        • 2015-10-13
        • 1970-01-01
        • 2013-12-06
        • 2014-10-10
        • 1970-01-01
        • 2015-01-12
        相关资源
        最近更新 更多