用丰富的上下文测试Webflow



Webflow是否可以在Spring的@WebAppConfiguration中进行测试,这样我就不必创建模拟服务bean等了?

特别是,webflow关于测试的(简洁)文档没有注意到这一点,并建议使用服务的存根类进行测试。这可能适用于非常细粒度的单元测试,但不适用于集成测试或更多增量单元测试。

尽管没有文档记录,但它确实可以工作并且可能很有用。使用Spring的@WebAppConfiguration和webflow来注册服务。注意,这些服务不会仅仅因为被@WebAppConfiguration找到而被调用。它们也需要在webflow测试中注册。

@RunWith(SpringJUnit4ClassRunner.class)
/**Use @WebAppConfiguration with path specified from maven's root to webapp root. 
 * Extend AbstractXmlFlowExecutionTests as per Webflow's documentation***/
@WebAppConfiguration("/WebContent")
@ContextHierarchy(
{ @ContextConfiguration(locations =
    { "classpath:AssessmentAdminTL-servlet.xml" }) })
public class TestFlowTest extends AbstractXmlFlowExecutionTests
{
@Autowired
private BusinessService businessService;
@Autowired
private AdminUserViewService adminUserViewService;
@Autowired
ApplicationContext context;
/**Specify flow config location***/
@Override
protected FlowDefinitionResource getResource(FlowDefinitionResourceFactory resourceFactory)
{
    return resourceFactory.createFileResource("WebContent/WEB-INF/flows/admin/flow-test.xml");
}
/**Register beans**/
@Override
protected void configureFlowBuilderContext(MockFlowBuilderContext builderContext)
{
    builderContext.registerBean("businessService", businessService);
    builderContext.registerBean("adminUserViewService", adminUserViewService);
}
/**Run Tests**/
@Test
public void testTestFlowEntryTest()
{
    try
    {
        TestSS.getLogger().debug("testTestFlowEntry ....");
        MutableAttributeMap input = new LocalAttributeMap();
        MockExternalContext econtext = new MockExternalContext();
        startFlow(input, econtext);
        assertCurrentStateEquals("hellotlv1");
        TestSS.getLogger().debug("testTestFlowEntry done");
    }
    catch (Exception e)
    {
        SS.getLogger().error(e.getMessage(), e);
        fail();
    }
}
@Test
public void testLoginSuccessTest()
{
    try
    {
    setCurrentState("xzlogin");
    MutableAttributeMap input = new LocalAttributeMap();
    ViewWrapperUserAdminLogin vwLogin = new ViewWrapperUserAdminLogin(new UserAdmin());
    vwLogin.setBusinessId(new Long(1));
    vwLogin.setUserName("jake0");
    vwLogin.setPassword("1234");
    vwLogin.setPin(1234);
    getFlowScope().put("userAdminForm", vwLogin);

    MockExternalContext context = new MockExternalContext();
    context.setEventId("dologin");
    resumeFlow(context);
    assertFlowExecutionEnded();
    assertFlowExecutionOutcomeEquals("xzhome");
    }
    catch(Exception e)
    {
        SS.getLogger().error(e.getMessage(),e);
        fail();
    }
}

}

最新更新