我一直在尝试测试我的插件但没有成功,即使在查看了各种来源之后MSDN https://blogs.msdn.microsoft.com/varsha/2010/08/17/writing-automated-test-cases-for-vsto-application/ and 堆栈溢出 https://stackoverflow.com/questions/45121396/vsto-unit-testing-office-addin-in-c-sharp-net-via-requestcomaddinautomationserv
我似乎做不到。
这是我当前的代码(我修剪为只有相关部分)
AssemblyInfo.cs
[assembly: ComVisible(true)]
[assembly: InternalsVisibleTo("MyAddInTest")]
ThisAddIn.cs
private AddinHelper _comAddinObject;
protected override object RequestComAddInAutomationService()
{
return _comAddinObject ?? (_comAddinObject = new AddinHelper());
}
AddinHelper.cs
[ComVisible(true)]
[Guid("B523844E-1A41-4118-A0F0-FDFA7BCD77C9")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IAddinHelper
{
string GetString();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("A523844E-1A41-4118-A0F0-FDFA7BCD77C9")]
[ComSourceInterfaces(typeof(IAddinHelper))]
public class AddinHelper : StandardOleMarshalObject, IAddinHelper
{
public string GetString()
{
return Globals.ThisAddIn.Application.ActiveWorkbook.Name;
}
}
ThisAddInTest.cs
Application = new Application();
Workbook = Application.Workbooks.Add();
COMAddIns comAddins = Application.COMAddIns;
COMAddIn comAddin = comAddins.Item("MyAddIn");
IAddinHelper comObject = (IAddinHelper) comAddin.Object;
主项目引用了.NET Assembly版本Microsoft.Office.Interop.Excel
将嵌入互操作类型设置为 true。
我的测试项目引用了我的 VSTO 项目和 Interop 的 COM (ActiveX) 版本。
我得到的例外是:
无法将类型“System.__ComObject”的 COM 对象强制转换为接口类型“MyAddIn.IAddinHelper”。此操作失败,因为对 IID 为“{B523844E-1A41-4118-A0F0-FDFA7BCD77C9}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE)) 。
我目前使用 Office 2013(即 Office 15.0),参考文献均指向该版本、.NET 4.5.3 和 Visual Stuio Community 2017。我提供的 SO 链接似乎是完全相同的问题,但我仍然有运行我的测试时出现异常,与那里不同。