我想单元测试我的项目的MQ系列实现,并且需要模拟到MQ系列服务器的连接以测试我的实现是否隔离,并避免发送消息/从实际队列中检索消息。如何使用MOQ for .NET模拟MQ系列对象MQQueueManager?
下面是代码:
using IBM.WMQ;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
namespace Test
{
[TestClass]
public class MQTest
{
[TestMethod]
public void SendMessage_MoqUnitTest()
{
//create a mock MQ manager
var mqManMock = new Mock<MQQueueManager>();
//test by calling the send method
MyMQhandler.MQSender mqsender = new MyMQhandler.MQSender();
//error happens when trying to access the moq object here
mqsender.Send("test message", mqManMock.Object);
}
}
}
我知道我没有做的MOQ任何设置还没有,但在此之前的任何代码实际上是反对它运行出现的问题。
问题是,当我这样做时,我得到一个异常。从与消息的内部异常 堆栈跟踪 “发生I/O错误”:
在IBM.WMQ.MQChannelTable.CreateChannelEntryLists(MQChannelListEntry名称列表) 在IBM.WMQ.Nmqi.ManagedNmqiMQ.CreateNameListEntryFromCCDT(字符串qMgrName,字符串ccdtFile) 在IBM.WMQ.Nmqi.ManagedNmqiMQ.CreateNameListEntryFromCCDT(字符串qMgrName) 在IBM.WMQ.Nmqi.ManagedNmqiMQ.GetNameList(字符串qMgrName) 在IBM.WMQ.Nmqi.ManagedNmqiMQ.DoConn(字符串qMgrName,MQConnectOptions CNO, ManagedHconn manHconn,Int32 & hConn,Int32 & compCode,Int32 & reason) at IBM.WMQ.Nmqi.ManagedNmqiMQ.MQCONNX(St环pQMgrName,MQConnectOptions pConnectOpts,Phconn phconn,的Int32 & pCompCode,的Int32 & pReason) 在IBM.WMQ.MQQueueManager.Connect(字符串queueManagerName) 在IBM.WMQ.MQQueueManager..ctor() 在Castle.Proxies.MQQueueManagerProxy。 .ctor(IInterceptor [])
大多数时候我运行它虽然我只是得到“函数评估超时”MQManMock.Object。
这是否意味着我不能模拟MQ?