J’ai cherché à faire un mock de la classe System.Messaging.MessageQueue pour les tests unitaire d’un projet.

Après avoir testé plusieurs solutions voici celle que j’ai retenu:

J’ai tout d’abord créé une interface qui reprends les fonctionnalités de MessageQueue que je souhaite utiliser.

Je simplifie ici pour que vous compreniez l’idée en me concentrant sur la méthode Send.

public interface IMessageQueue
{
    void Send(object message);
}

Pour l’utilisation réel j’utilise une classe implémentant cette interface :

public class RealMessageQueue : IMessageQueue
{
    private System.Messaging.MessageQueue myQueue =
        new System.Messaging.MessageQueue(@".\Private$\MyQueue");

    public void Send(object message)
    {
        myQueue.Send(message);
    }
}

Il suffit donc de passer le mock de l’interface pour vos tests unitaires.