Visual studio 升级Visual Studio 2013和Microsoft Fakes v12后,ShimNotImplementedException实现

Visual studio 升级Visual Studio 2013和Microsoft Fakes v12后,ShimNotImplementedException实现,visual-studio,unit-testing,visual-studio-2013,microsoft-fakes,Visual Studio,Unit Testing,Visual Studio 2013,Microsoft Fakes,我们正在Visual Studio 2013中使用Microsoft Fakes。在更新到Visual Studio 2013 Update-4或Update-5之后,我们在测试中得到了ShimNotImplementedException 我们已经关闭了我们的Microsoft.QualityTools.Testing.Fakes参考资料的specific version。这允许编译,但运行时测试仍然失败。中找到了解决此问题所需的提示 潜在的问题是遗留测试没有定义特定的方法 在代码所基于的Sh

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


我们已经关闭了我们的
Microsoft.QualityTools.Testing.Fakes
参考资料的
specific version
。这允许编译,但运行时测试仍然失败。

中找到了解决此问题所需的提示

潜在的问题是遗留测试没有定义特定的方法 在代码所基于的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
        });

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

似乎发生的是,在处理Dispose方法时发生了一些变化。最初,我没有在RegistryKey上实现Dispose方法。在.NET4下运行时,这似乎没有引起任何问题。但是,在切换到4.5.2之后,它一直被隐式调用

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

Microsoft.Win32.Fakes.ShimRegistryKey.AllInstances.Dispose = (key) => { };
现在考试又通过了

请注意,将其设置为NULL并不能解决此问题。一定有办法