使用 VSTO 对 Excel 插件进行单元测试

2024-01-08

我一直在尝试测试我的插件但没有成功,即使在查看了各种来源之后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 链接似乎是完全相同的问题,但我仍然有运行我的测试时出现异常,与那里不同。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 VSTO 对 Excel 插件进行单元测试 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 如何使用vba复制Excel工作表中的动态范围

    我试图使宏中的范围是动态的 而不指定最后一行x Sheets SheetName Range A2 K1000 Copy在 1000 行中 我想将其更改为动态 因为有时我的数量会更少或更多 尝试这个 Sub Test Dim lRow as
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 将 MS 转换为秒

    我发现这个公式可以用来将 MS 转换为秒 但它是为 Excel 2002 编写的 而我正在使用 2010 CONCATENATE TEXT INT B1 1000 86400 hh mm ss B1 INT B1 1000 1000 以下是
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 强制 selectize.js 仅显示以用户输入开头的选项

    我正在使用 selectize js 目前它看起来像这样 它不仅显示以 arm 开头的单词 还显示在其他位置包含 arm 作为子字符串的单词 或选项 我想强制该函数仅显示以 arm 开头的单词 或选项 我检查了使用文档https githu
  • Spark saveAsTextFile() 写入多个文件而不是一个[重复]

    这个问题在这里已经有答案了 我现在在我的笔记本电脑上使用 Spark 和 Scala 当我将 RDD 写入文件时 输出将写入两个文件 part 00000 和 part 00001 我如何强制 Spark Scala写入一个文件 我的代码目
  • 根据第二个文本文件从文本文件中删除重复项

    如何从文本文件中删除所有行 main txt 通过检查第二个文本文件 removethese txt 什么是有效的方法如果文件大于 10 100mb 使用苹果电脑 Example main txt 3 1 2 5 删除这些行 removet
  • iPhone SDK:如何创建一个在点击位置插入文本的 UITextView?

    我想创建一个 UITextView 您可以点击其中的任何位置并开始在该位置键入 该控件的默认行为是从最后一个字符结束处开始键入 因此 如果我有一个没有文本的 UITextView 并点击控件的中间 我想从那里开始输入 而不是从左上角开始 实
  • 如何合并两个大型数据集,同时在r中生成具有不同重复值的新列

    我有一个让我抓狂的问题 真的需要你的帮助 简化的问题是这样的 d1 lt data table v1 c a b c d d b a c a d b a v2 seq 1 12 V3 rep 1 4 times 3 d2 lt data t
  • Julia:为类型实现标准数学运算

    有没有办法在 julia 中为用户创建的类型实现基本算术 例如 type Foo bar Float32 foo Int32 end a Foo 3 23 23 b Foo 4 56 54 c a b 如果可能的话 我怎样才能做到这一点 提
  • 树视图闪烁,没有任何事件

    我有一个闪烁TreeView我知道这是一个常见问题 事情是TreeView没有事件 是的 我明白 当我从 a 递归添加节点时XmlDocument它有点闪烁 这是正常的 即使所有内容都加载后 我的也会闪烁 当我的鼠标悬停在节点上或单击节点时
  • SFINAE 在类型和非类型模板参数的情况下工作方式不同

    为什么这段代码有效 template lt typename T std enable if t
  • 获取数据表中某一列的行索引

    1 2 3 A B C D E F G H I System Data DataTable dt new DataTable dt Columns Add 1 dt Columns Add 2 dt Columns Add 3 dt Row
  • 在 Mercurial 中编写自定义日志关键字过滤器作为扩展

    我已经检查了有关如何编写 Mercurial 扩展的教程 我想知道如何专门为日志关键字添加过滤器 感谢帮助 我认为一个例子可以最好地解释它 from mercurial import templatefilters def upper s
  • VS2010项目依赖

    我在 VS2010 中有一个 C 项目和一个 C 项目 该项目将使用此 C 项目输出 它将其用于 p invoke 我想我可以通过编辑解决方案中的 项目依赖项 来确保 c 项目在 c 项目之前构建 但这似乎没有任何效果 我的构建服务器上的构
  • 无法在 Windows 10 上使用 docker 访问 localhost:8080

    当运行我的docker compose development yaml在我的电脑上 我无法连接到http localhost 8080 另外 我可以跑步docker compose f docker compose development
  • wpf如何绑定到DataContext存在?

    我在代码中动态设置数据上下文 我希望屏幕上的按钮能够启用 禁用 具体取决于是否DataContext null或不 当我分配 DataContext 时 我可以在代码中执行此操作 但如果我可以像这样绑定那就更好了 您应该能够使用DataTr
  • 通过 .htaccess 更改根文件夹

    我有一个与域名关联的共享托管帐户 根文件夹 如果术语错误请纠正我 设置为 以便服务器上的所有文件都是公共的 可以通过浏览器访问 我可以使用 htaccess 或其他东西将根文件夹更改为类似的内容 example com public 如果我
  • numpy 数组行专业和列专业

    我无法理解如何numpy存储其数据 考虑以下 gt gt gt import numpy as np gt gt gt a np ndarray shape 2 3 order F gt gt gt for i in xrange 6 a
  • 如何用Java将wav文件分成1秒的片段?

    之前我有个问题 Java读取wav文件 https stackoverflow com questions 5210147 reading wav file in java 首先 我想用 Java 读取一个 wav 文件并将其字节处理到一个
  • DataTables 服务器端分页

    我有工作 Spring REST 应用程序与客户端分页 默认由 DataTables 和一切正常 现在我需要将其更改为服务器端分页 我遇到了问题 因为不知道如何从数据表中获取客户端想要查看的页码信息 我在 DT 手册中找不到任何有用的内容
  • 对数组进行排序以避免相邻项具有重复属性

    我有一系列对象 每个对象都有一个颜色属性 可以是 红色 蓝色 黄色 绿色 橙色 或 紫色 数组中有 20 30 个对象 因此颜色重复 我的目标是对数组进行排序 以便没有颜色彼此相邻 颜色的分布并不完全均匀 但很接近 这是我到目前为止所拥有的
  • vim 过滤器和 stdout/stderr

    当我使用 通过过滤器运行文件的内容 过滤器失败 它返回除 0 之外的另一个代码 并向 stderr 打印一条错误消息 我的文件被此错误消息替换 如果过滤器返回指示错误和 或忽略过滤器程序写入 stderr 的输出的状态代码 是否有办法告诉
  • 使用 VSTO 对 Excel 插件进行单元测试

    我一直在尝试测试我的插件但没有成功 即使在查看了各种来源之后MSDN https blogs msdn microsoft com varsha 2010 08 17 writing automated test cases for vst