방법을 조롱하는 MSMQ Messageque
-
06-07-2019 - |
문제
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 객체에 의존하고 기능을 테스트 할 수 있습니다.
제휴하지 않습니다 StackOverflow