I've been working on making improvements to the unit testing of SwitchYard Services. See Dev Forum post.
Imagine I have a CDI bean service as follows...
@Service
public class BasicOrderManagementService {
public OrderResponse createOrder(OrderRequest request) {
return new OrderResponse(request.orderId);
}
}
Up to this point, invoking/testing the createOrder operation on that service in a test would have involved code like the following...
ServiceDomain domain = ServiceDomains.getDomain();
// Consume the OM model...
MockHandler responseConsumer = new MockHandler();
org.switchyard.Service service = domain.getService(new QName("BasicOrderManagementService"));
Exchange exchange = domain.createExchange(service, new BaseExchangeContract(new InOutOperation("createOrder")), responseConsumer);
Message inMessage = exchange.createMessage();
inMessage.setContent(new OrderRequest("D123", "ABCD"));
exchange.send(inMessage);
// wait, since this is async
responseConsumer.waitForOKMessage();
OrderResponse response = (OrderResponse) responseConsumer.getMessages().poll().getMessage().getContent();
Assert.assertEquals("D123", response.orderId);
By extending the new SwitchYardCDITestCase class, we can now express the same test as...
Message responseMsg = newInvoker("BasicOrderManagementService.createOrder").
sendInOut(new OrderRequest("D123", "ABCD"));
OrderResponse response = (OrderResponse) responseMsg.getContent();
Assert.assertEquals("D123", response.orderId);