2012-09-27 1 views
1

Это похоже на Spring Web Flow - How can I set up unit test with values already in conversationScope?Unit Spring Web Flow тесты: Установите атрибут в FlowScope без представления государства

Я использовал решения, перечисленные в этом вопросе, чтобы решить проблему с conversationScope, но уже попав в стену, пытаясь сделайте то же самое для FlowScope. По какой-то причине FlowExecution не имеет метода getFlowScope().

Любые рекомендации или рекомендации в правильном направлении будут очень оценены. Благодаря!

Update:

Чтобы дать больше контекста, это линия в WebFlow Я пытаюсь тест:

<evaluate expression="serviceFactory.getInstance(flowScope.config.country).startTransaction(flowScope.SomeList.get(0), 0)" /> 

и relavant заявление тест является:

EasyMock.expect(serviceObjectMock.startTransaction(someObjectMock, 0)).andReturn(true); 

и он терпит неудачу. Когда я просматриваю код в отладчике, я вижу, что на этом вызове было исключение IndexOutOfBoundsException, что привело к моему предположению, что я должен иметь список как-то в flowScope.

ответ

0

Для всех, кто заинтересован, я узнал, что мне не нужно явно устанавливать атрибут в flowScope, поскольку EasyMock обрабатывает это, пока он проходит через список «ожидает».

Моя проблема заключалась в том, что «flowScope.SomeList.get (0)» относится к атрибуту, который был установлен в предыдущей строке, и я использовал «новый ArrayList()» в качестве возвращаемого значения в выражении «ожидать» для эта линия.

А также, «провальная бесшумная» часть была из-за того, что я не разрешал информацию уровня DEBUG в тестовом профиле весны.

Это в файле тест log4j.xml решить проблему:

<logger name="org.springframework"> 
    <level value="DEBUG" /> 
</logger> 
+0

Я wirting junit для весеннего webflow и я вроде застрял на некоторое время, вы можете посмотреть в этом посте и предложить любое предложение http://stackoverflow.com/questions/39010531/not-able-to-get-the-flow-scope-variable-from -one-state-transition-to-another-sta спасибо – henrycharles

0

в FlowExecution, вы можете использовать getActiveSession().getScope()
, который даст вам FlowScope, где вы можете поместить свои атрибуты (после запуска потока)

То, что вы пытаетесь сделать, на самом деле не имеет смысла, потому что Флоу атрибуты с областью действия существуют для жизни сеанса активного потока. Вы не можете установить их перед запуском потока.

+0

Привет, спасибо за Ваш ответ. Я хочу заполнить атрибут flowScope перед запуском потока, поскольку атрибут будет использоваться до первого состояния представления, поэтому я не могу приостановить поток с помощью setCurrentState, установить атрибут, а затем возобновить поток. У вас есть какие-то способы, как я могу это сделать? Благодаря! – shaunlim

+0

Это ошибка, которую я получаю: java.lang.IllegalStateException: нет активного потока для доступа; этот FlowExecution не запущен \t at org.springframework.webflow.engine.impl.FlowExecutionImpl.getActiveSession (FlowExecutionImpl.java:188) – shaunlim

+0

О, я вижу. вы можете получить активную сессию только после того, как поток уже начался. моя вина. – rptmat57