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();
}
}
}