我有一个在 Excel 中运行的“应用程序级”VSTO 加载项(与“文档级”相对)。加载项运行良好。我使用的是 Ribbon XML 选项,而不是 Ribbon 设计器。这样做,您最终会得到一个从 Office.IRibbonExtensibility 派生的 Ribbon 类,它具有各种方法,例如:
public void OnTextButton(Office.IRibbonControl control)
{ ....
}
等等
现在,当我创建一个单元测试项目时,添加对我的加载项的引用,然后从引用下的右键菜单中选择“添加假程序集”,我得到一个错误。
我不相信它与我的项目有任何关系,因为我验证了示例加载项代码也会发生同样的事情,例如这个项目: http: //www.codeproject.com/Articles/296288/Excel-Add -in-for-Exporting-Excel-data-to-XML
为了重现,我下载了该插件: 1. 在 Visual Studio 2010/2012/2013 中打开它 2. 在同一解决方案中创建一个单元测试项目。3. 将加载项项目作为解决方案级引用添加到单元测试项目。在这个特定的示例中,它被称为“ExcelExportXML”。4.然后在Unit Test项目中展开References树,右键点击插件引用,即ExcelExportXML,选择“Add Fake Assembly”。这要求您至少拥有高级版的 Visual Studio。专业版不够用。
您最终会遇到如下错误:
error CS0234: The type or namespace name 'IRibbonControl' does not exist in the namespace 'eexml::Microsoft.Office.Core' (are you missing an assembly reference?) [...\UnitTestProject1\obj\Debug\Fakes\eexml\f.csproj]
最好重复上述步骤来重现问题 - 只需几分钟。
我的要求是这样的。有没有办法在不切换到另一个模拟/隔离器框架的情况下完成这项工作。我真的想避免任何人建议我不要使用“Microsoft Fakes Framework”,因为这真的没有用处,除非您绝对肯定没有办法让这两种 Microsoft 技术有效地协同工作。
我已经尝试在 .fakes 文件中使用各种组合。这是我到目前为止所尝试的:
<StubGeneration>
<Clear />
<Remove TypeName="Ribbon1" />
<Remove TypeName="ExcelAddIn1.Ribbon1" />
<Remove FullName="ExcelAddIn1.Ribbon1"/>
<Remove Namespace="ExcelAddIn1"/>
<Remove Namespace="Microsoft.Office.Core"/>
<Remove Namespace="eexml::Microsoft.Office.Core"/>
<Remove FullName="Microsoft.Office.Core.IRibbonControl"/>
<Remove TypeName="IRibbonControl"/>
</StubGeneration>
我花了大约半天的时间研究这个。任何帮助(除了将组件拆分为 VSTO 和非 VSTO 部分)将不胜感激。