代码之家  ›  专栏  ›  技术社区  ›  TM. Randy Simon

SpringWebFlow-如何使用conversationScope中已有的值设置单元测试?

  •  4
  • TM. Randy Simon  · 技术社区  · 15 年前

    我试图对一个以决策状态开始的流进行单元测试。决策状态将检查位于数据库上的对象的值 conversationScope . 我不知道如何将值插入到 会话范围

    getConversationScope().put("someName", value);
    MockExternalContext context = new MockExternalContext();
    startFlow(context);
    

    然而,当我打电话的时候 startFlow(context) 该值已清除。

    我还尝试:

    MockExternalContext context = new MockExternalContext();
    setCurrentState("someDecisionState");
    resumeFlow(context)
    

    但是测试失败了,错误告诉我不能从决策状态恢复,只能从视图状态恢复。

    有人知道我如何在服务器上插入模拟值吗 会话范围 这样我就可以测试这些案例了?

    1 回复  |  直到 13 年前
        1
  •  6
  •   Scott Bale    15 年前

    这不明显,但我想到了这个:

    public void testFoo() {
        FlowExecution flowExecution = getFlowExecutionFactory().createFlowExecution(getFlowDefinition());
        updateFlowExecution(flowExecution);
        flowExecution.getConversationScope().put("fooBar", "goo");
        flowExecution.start(null, new MockExternalContext());        
        assertCurrentStateEquals("fooView");
    }
    

    AbstractXmlFlowExecutionTests.startFlow() 查看它是如何实例化 FlowExecution ,并将其中的一部分复制并粘贴到单元测试中。

    <?xml version="1.0" encoding="UTF-8"?>
    <flow xmlns="http://www.springframework.org/schema/webflow"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/webflow
            http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd">
    
        <action-state id="decideFoo">
            <evaluate expression="conversationScope.fooBar" />
            <transition on="goo" to="fooView" />
            <transition on="gar" to="barView" />
        </action-state>
    
        <view-state id="fooView" />
    
        <view-state id="barView" />
    
    </flow>