문제

MSMQ를 사용하는 응용 프로그램을 테스트하고 싶지만 Messagequeue 객체를 조롱하는 방법을 찾지 못했습니다.

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

Xunit과 함께 MOQ를 사용하고 있습니다.

도움이 되었습니까?

해결책

따라서 여기서 기본적인 문제는 Messagequeue 객체에 대한 의존성이 어려워집니다. 일반적으로 이와 같은 상황이 있으면 iqueue와 같은 인터페이스를 만들고 Messagequeue 용 iqueue 구현을 만들 것입니다.

그런 다음 iqueue 종속성을 MOQ로 주입하고 클래스가 예상대로 작동하는지 테스트 할 수 있습니다.

이 같은:

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

구현은 다음과 같습니다.

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

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

그런 다음 Messagequeue에 의존하는 수업의 경우 다음과 같은 것입니다.

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 객체에 의존하고 기능을 테스트 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top