我目前正在构建一个组件,用于向不同的JMS代理发送和接收消息(例如ActiveMQ,TibcoEMS)。 显然,我想构建单元测试以验证该组件的功能。我想测试的一件事是发送消息的方法。
public void Send( IJmsMessage jmsMessageToSend ) {
TIBCO.EMS.Connection connection = TempPermLayer.GetConnection();
connection.Start();
Session session = TempPermLayer.GetSession(connection);
MessageProducer producer = TempPermLayer.GetMessageProducer(session);
try {
IMessageFactory<Message> messageFactory = new TibcoEmsMessageFactory(session, producer);
Message message = messageFactory.ProduceMessageUsing(jmsMessageToSend);
producer.Send(message);
}
finally {
TempPermLayer.CleanUp();
}
}
层类可以对方法的实际行为进行细粒度控制,因此是必要的。最后,上面的方法将归结为类似的东西:
public void Send( IJmsMessage jmsMessageToSend ) {
ConnectionFactory connectionFactory = new ConnectionFactory(Host);
Connection connection = connectionFactory.CreateConnection();
connection.Start();
Session session = connection.CreateSession(false, SessionMode.ClientAcknowledge);
Destination dest = session.CreateQueue("myQueue");
MessageProducer producer = session.CreateProducer(dest);
IMessageFactory<Message> messageFactory = new TibcoEmsMessageFactory(session, producer);
Message message = messageFactory.ProduceMessageUsing(jmsMessageToSend);
producer.Send(message);
}
IJmsMessage
和TibcoEmsMessageFactory
基本上是代理特定实现的包装器(例如TIBCO.EMS.Message
)。
测试第一个提供的方法实际上不会测试我不需要测试的功能,例如Tibco EMS Client实现如何创建连接。还有一些额外的功能 - 与第二种方法不同,这是我实际上不会测试的东西;)
我看到了两种测试这种方法的方法:
实际问题:
我忘了还有其他方法或可能吗?如果没有,你认为上述哪种方法在我的情况下更可取?
答案 0 :(得分:0)
模拟JMS实现听起来很乏味。如果您还想这样做,请考虑this article。
我个人更喜欢拥有并自动化本地JMS代理...... 如何使用轻量级服务器,例如FFMQ?
我采取的两个想法in another post。