首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何模拟MSMQ MessageQueue

如何模拟MSMQ MessageQueue
EN

Stack Overflow用户
提问于 2009-10-27 06:16:51
回答 1查看 5.7K关注 0票数 16

我想对使用MSMQ的应用程序进行单元测试,但是我没有找到方法来模拟MessageQueue对象。

代码语言:javascript
复制
        var queuePath = @".\Private$\MyQueue";
        MessageQueue queue = null;
        if (MessageQueue.Exists(queuePath))
        {
            queue = new MessageQueue(queuePath);
        }
        else
        {
            queue = MessageQueue.Create(queuePath);
        }

我在xUnit中使用Moq。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-27 06:21:16

因此,这里的基本问题是您对MessageQueue对象有很强的依赖性。通常,当我遇到这样的情况时,我会创建一个接口,比如IQueue,然后为MessageQueue创建一个IQueue实现。

然后,您可以使用Moq注入IQueue依赖项,并测试您的类是否按预期运行。

如下所示:

代码语言:javascript
复制
public interface IQueue
{
     bool Exists(string path);
     MessageQueue Create(string path);
}

其实现如下所示:

代码语言:javascript
复制
public MessageQueueImplementation : IQueue
{
    public bool Exists(string path)
    {
         return MessageQueue.Exists(path);
    }

    public MessageQueue Create(string path)
    {
         return MessageQueue.Create(path);
    }
}

然后,对于您的类,这依赖于MessageQueue,如下所示:

代码语言:javascript
复制
public class DependentOnQueue
{
    private IQueue queue;
    //inject dependency
    public DependentOnQueue(IQueue queue)
    {
        this.queue = queue;
    }

    public MessageQueue CreateQueue(string path)
    {
         //implement method that you want to test here
    }
}

现在,您可以使用moq将一个IQueue对象注入到这个依赖于MessageQueue对象的类中,并测试其功能。

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

https://stackoverflow.com/questions/1627654

复制
相关文章

相似问题

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