diff --git a/spring-webflow-reference/src/testing.xml b/spring-webflow-reference/src/testing.xml index 5631f7d7..cc3f015a 100644 --- a/spring-webflow-reference/src/testing.xml +++ b/spring-webflow-reference/src/testing.xml @@ -7,4 +7,68 @@ This chapter shows you how to test flows. + + + To test the execution of a XML-based flow definition, extend AbstractXmlFlowExecutionTests: + + +public class BookingFlowExecutionTests extends AbstractXmlFlowExecutionTests { +} + + + At a minimum, you must override getResource(FlowDefinitionResourceFactory) to return the path to your flow: + + +@Override +protected FlowDefinitionResource getResource(FlowDefinitionResourceFactory resourceFactory) { + return resourceFactory.createFileResource("src/main/webapp/WEB-INF/flows/booking/booking.xml"); +} + + + If your flow has dependencies on externally managed services, also override configureFlowBuilderContext(MockFlowBuilderContext) to register stubs or mocks of those services: + + +@Override +protected void configureFlowBuilderContext(MockFlowBuilderContext builderContext) { + builderContext.registerBean("bookingService", new StubBookingService()); +} + + + Have your first test exercise the startup of your flow: + + +public void testStartBookingFlow() { + Booking booking = createTestBooking(); + + MutableAttributeMap input = new LocalAttributeMap(); + input.put("hotelId", "1"); + MockExternalContext context = new MockExternalContext(); + context.setCurrentUser("keith"); + startFlow(input, context); + + assertCurrentStateEquals("enterBookingDetails"); + assertTrue(getRequiredFlowAttribute("booking") instanceof Booking); +} + + + Assertions generally verify the flow is in the correct state you expect. + + + Define additional tests to exercise event handling behavior. + You goal should be to exercise all paths through the flow. + You can use the convenient setCurrentState(String) method to jump to the flow state where you wish to begin your test. + + +public void testEnterBookingDetails_Proceed() { + setCurrentState("enterBookingDetails"); + getFlowScope().put("booking", createTestBooking()); + + MockExternalContext context = new MockExternalContext(); + context.setEventId("proceed"); + resumeFlow(context); + + assertCurrentStateEquals("reviewBooking"); +} + + \ No newline at end of file