【问题标题】:Testing Webflow with rich context使用丰富的上下文测试 Webflow
【发布时间】:2015-09-08 00:45:31
【问题描述】:

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

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

【问题讨论】:

  • 注意:我实际上刚刚找到了这个问题的答案,并认为我会分享,因为据我所知,我没有记录在任何地方。如果这是失礼,高代表可以告诉我,我会删除

标签: unit-testing spring-webflow


【解决方案1】:

即使没有记录,它确实有效并且很有用。使用 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();
    }
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-26
    • 2011-07-27
    • 2013-03-27
    • 2013-02-09
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2012-09-12
    相关资源
    最近更新 更多