我们正在使用Microsoft Fakes与Visual Studio 2013.在更新到Visual Studio 2013 Update-4或Update-5之后,我们在测试中得到ShimNotImplementedException
。
我们followed instructions found in other SOF questions并关闭了SpecificVersion
个引用的Microsoft.QualityTools.Testing.Fakes
。这允许编译,但运行时测试仍然失败。
答案 0 :(得分: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()
将缺少的属性添加到我们的垫片构造中解决了这个问题:
return new Sitecore.Ecommerce.ShopContext(new ShimSiteContext
{
PropertiesGet = () => new NameValueCollection(),
DatabaseGet = () => null //ADDING THIS SOLVED THE ISSUE
});
答案 1 :(得分:1)
在使用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确实不解决它。必须有一种方法。