开发者

How-To Mock MSMQ MessageQueue

开发者 https://www.devze.com 2022-12-09 06:26 出处:网络
I want to Unit Test my application which use MSMQ but i found no way in order to Mock MessageQueue objects.

I want to Unit Test my application which use MSMQ but i found no way in order to Mock MessageQueue objects.

        var queuePath = @".\Private$\MyQueue";
        MessageQueue queue = null;
        if (MessageQueue.Exists(queuePath))
        {
            queue = new MessageQueue(queuePath);
        }
        else
        {
            queue = MessageQueue.Create(queuePath);
        }

I'm usin开发者_StackOverflow社区g Moq with xUnit.


So the basic problem here is that you have a hard dependency on the MessageQueue object. Generally when I have a situation like this, I'll create an interface, like IQueue and then create an implementation of IQueue for MessageQueue.

Then you can inject the IQueue dependency with Moq and test that your class is functioning as expected.

Something like this:

public interface IQueue
{
     bool Exists(string path);
     MessageQueue Create(string path);
}

The implementation would be something like this:

public MessageQueueImplementation : IQueue
{
    public bool Exists(string path)
    {
         return MessageQueue.Exists(path);
    }

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

Then for your class that depends on the MessageQueue something like this:

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
    }
}

Now you can inject an IQueue object using moq into this class that depends on the MessageQueue object and test the functionality.

0

精彩评论

暂无评论...
验证码 换一张
取 消