Yoa*_*. B 16 unit-testing msmq moq
我想单元测试我的应用程序使用MSMQ,但我发现没有办法,以模拟MessageQueue对象.
var queuePath = @".\Private$\MyQueue";
MessageQueue queue = null;
if (MessageQueue.Exists(queuePath))
{
queue = new MessageQueue(queuePath);
}
else
{
queue = MessageQueue.Create(queuePath);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Moq和xUnit.
lom*_*axx 30
所以这里的基本问题是你对MessageQueue对象有很强的依赖性.通常当我遇到这样的情况时,我将创建一个接口,如IQueue,然后为MessageQueue创建IQueue的实现.
然后,您可以使用Moq注入IQueue依赖项并测试您的类是否按预期运行.
像这样的东西:
public interface IQueue
{
bool Exists(string path);
MessageQueue Create(string path);
}
Run Code Online (Sandbox Code Playgroud)
实现将是这样的:
public MessageQueueImplementation : IQueue
{
public bool Exists(string path)
{
return MessageQueue.Exists(path);
}
public MessageQueue Create(string path)
{
return MessageQueue.Create(path);
}
}
Run Code Online (Sandbox Code Playgroud)
那么对于依赖于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
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用moq将IQueue对象注入此类,该类依赖于MessageQueue对象并测试功能.