Testing 在JMS队列中发送自定义对象的本机方式?(柑橘模拟器)
我正在寻找一种本机(就框架而言是正确的)方式,在柑橘模拟器中向JMS发送第三方(自定义)对象? 我试过:Testing 在JMS队列中发送自定义对象的本机方式?(柑橘模拟器),testing,integration-testing,citrus-framework,Testing,Integration Testing,Citrus Framework,我正在寻找一种本机(就框架而言是正确的)方式,在柑橘模拟器中向JMS发送第三方(自定义)对象? 我试过: scenario .send() .payloadModel(myObject); 但在JMS队列中,myObject显示为com.consol.citrus.message.DefaultMessage,而不是com…myObject 示例: 场景-接收http POST请求(作为触发器)并将其JMS对象发送到消息队列 配置 ... .useObjectMessages(true) .
scenario
.send()
.payloadModel(myObject);
但在JMS队列中,myObject显示为com.consol.citrus.message.DefaultMessage,而不是com…myObject
示例:
场景-接收http POST请求(作为触发器)并将其JMS对象发送到消息队列
配置
...
.useObjectMessages(true)
...
场景
...
import com.temafon.data.MORequest;
@Scenario("morequest")
@RequestMapping(value = "/simulator/morequest",method = RequestMethod.POST)
public class JmsMoRequestScenario extends AbstractSimulatorScenario {
@Override
public void run(ScenarioDesigner scenario) {
MORequest request = new MORequest(12345678901L, "USSD", "1172", "ON",
11L);
request.setSourcePort(3);
scenario
.receive()
.payload("getmorequest");
scenario
.send("jms.queue.destination")
.payloadModel(request);
在这种情况下,我希望进入jms.queue.destination,类似于屏幕1
另外,我已经使用JavaActionBuilder和jmsTemplate.send实现了变通方法,并添加了其他类和
scenario
.java(//Object).method(//instance");
但是,在citrus Java DSL中设置
payloadModel()
总是会导致对象的某种编组表示,这不是您想要的。使用.useObjectMessages(true)
都不适用于您,因为这会导致整个Citrus message对象用作消息负载
您需要定义一个完整的Citrus消息对象,它在JMS目的地的有效负载创建方面保持不变。然后,Citrus会自动使用带有适当对象负载的JMS对象消息
MORequest request = new MORequest(12345678901L, "USSD", "1172", "ON", 11L);
request.setSourcePort(3);
scenario
.receive()
.payload("getmorequest");
scenario
.send("jms.queue.destination")
.message(new JmsMessage(request));
请注意,我使用的是.message()
fluent API,而不是payloadModel()
API。消息API接收柑橘类消息对象,如com.consol.Citrus.jms.message.JmsMessage
或com.consol.Citrus.message.DefaultMessage
您的自定义域模型对象请求被用作构造函数arg,并将作为对象负载生成JMS消息。当然MORequest
必须是java.io.Serializable