首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用moq模拟第三方回调事件

使用moq模拟第三方回调事件
EN

Stack Overflow用户
提问于 2010-01-20 05:25:13
回答 1查看 5.3K关注 0票数 7

我们一直在尝试为一个用C#编写的worker类编写单元测试,它使用moq动态创建模拟对象的第三方应用程序接口(基于COM)。NUnit是我们的单元测试框架。

这个第三方组件实现了几个接口,但也需要使用事件回调我们的worker类。我们的计划是模拟这个第三方组件可以引发的事件,并测试我们的worker类是否按预期运行。

不幸的是,我们遇到了一个问题,因为moq似乎无法模拟和引发外部定义的事件。不幸的是,我不能提供我们正在使用的确切第三方API的代码,但我们已经使用MS Word API重新创建了这个问题,并展示了使用本地定义的接口时测试是如何工作的:

代码语言:javascript
复制
using Microsoft.Office.Interop.Word;
using Moq;
using NUnit.Framework;
using SeparateNamespace;

namespace SeparateNamespace
{
    public interface LocalInterface_Event
    {
        event ApplicationEvents4_WindowActivateEventHandler WindowActivate;
    }
}

namespace TestInteropInterfaces
{
    [TestFixture]
    public class Test
    {
        [Test]
        public void InteropExample()
        {
            // from interop
            Mock<ApplicationEvents4_Event> mockApp = new Mock<ApplicationEvents4_Event>();

            // identical code from here on...
            bool isDelegateCalled = false;

            mockApp.Object.WindowActivate += delegate { isDelegateCalled = true; };

            mockApp.Raise(x => x.WindowActivate += null, null, null);

            Assert.True(isDelegateCalled);
        }

        [Test]
        public void LocalExample()
        {
            // from local interface
            Mock<LocalInterface_Event> mockApp = new Mock<LocalInterface_Event>();

            // identical code from here on...
            bool isDelegateCalled = false;

            mockApp.Object.WindowActivate += delegate { isDelegateCalled = true; };

            mockApp.Raise(x => x.WindowActivate += null, null, null);

            Assert.True(isDelegateCalled);
        }
    }
}

谁能解释一下为什么为本地定义的接口引发事件有效,而不是从第三方API (在本例中为Word)导入的接口?

我有一种感觉,这是因为我们正在与一个COM对象对话(通过互操作程序集),但不确定如何解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2010-01-21 03:12:13

您能否从第三方重新定义COM接口,并将其与moq一起使用。

您的意图似乎是为了摆脱外部依赖,而moq并没有很好地处理COMInterop程序集,您应该能够打开反射器并从互操作程序集中提取任何您想要的接口定义,定义模拟并运行您的单元测试

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2097205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档