我想对使用MSMQ的应用程序进行单元测试,但是我没有找到方法来模拟MessageQueue对象。
var queuePath = @".\Private$\MyQueue";
MessageQueue queue = null;
if (MessageQueue.Exists(queuePath))
{
queue = new MessageQueue(queuePath);
}
else
{
queue = MessageQueue.Create(queuePath);
}
我在xUnit中使用Moq。
发布于 2009-10-27 06:21:16
因此,这里的基本问题是您对MessageQueue对象有很强的依赖性。通常,当我遇到这样的情况时,我会创建一个接口,比如IQueue,然后为MessageQueue创建一个IQueue实现。
然后,您可以使用Moq注入IQueue依赖项,并测试您的类是否按预期运行。
如下所示:
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对象的类中,并测试其功能。
https://stackoverflow.com/questions/1627654
复制相似问题