ربيع تدفق الانترنت - كيف يمكنني إعداد اختبار وحدة مع القيم بالفعل في conversationScope؟

StackOverflow https://stackoverflow.com/questions/804326

سؤال

وأنا أعمل على مشروع باستخدام الربيع تدفق الويب 2.0.

واني اسعى الى اختبار وحدة تدفق التي تبدأ مع دولة القرار. يتحقق الدولة قرار قيمة كائن موجود على conversationScope. أنا لا يمكن معرفة كيفية إدراج قيمة في conversationScope لاختبار وحدة.

ولقد حاولت:

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

ولكن يبدو أنه عندما أدعو startFlow(context) يتم مسح القيمة.

وكما أنني حاولت:

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

ولكن فشل الاختبار مع وجود خطأ تقول لي أنني لا يمكن أن تستأنف من دولة القرار، فقط من حالة العرض.

لا أحد يعرف كيف يمكن إدراج قيم وهمية على conversationScope لدرجة أنني قد اختبار هذه الحالات؟

هل كانت مفيدة؟

المحلول

وانها ليست واضحة، ولكن خطرت لي هذه:

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

واضطررت الى حفر في AbstractXmlFlowExecutionTests.startFlow() الكامنة لنرى كيف كان instantiating في 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top