В модульном тесте Spring Webflow, как вы утверждаете, что состояние представления имеет представление с заданным именем?

Я разрабатываю веб-поток Spring, пытаясь использовать TDD, поэтому я расширил AbstractXmlFlowExecutionTests. Я не вижу очевидного способа утверждать то, что, как мне казалось, было бы простым: что состояние просмотра имеет связанное представление с данным именем. Например, учитывая этот поток (отрывок):

<?xml version="1.0" encoding="UTF-8"?>
<flow ...>
    ...
    <view-state id="foo" view="barView">
    </view-state>
</flow>

и модульный тест

public void testAssertFooStateHasBarView() {
    ...
    assertCurrentStateEquals("foo");
    assertTrue( getFlowDefinition().getState("confirmation").isViewState());
    // Surely there's an easier way...?
    ViewState viewState = (ViewState)getFlowDefinition().getState("foo");
    View view = viewState.getViewFactory().getView(new MockRequestContext());
    // yuck!
    assertTrue(view.toString().contains("barView"));
}

Есть ли более простой способ утверждать, что состояние foo имеет вид barView?


person Scott Bale    schedule 28.04.2009    source источник


Ответы (3)


Вы можете использовать это:

assertResponseWrittenEquals("barView", context);

Где context это ваш MockExternalContext.

Во всяком случае, я всегда так проверяю.

person TM.    schedule 22.06.2009
comment
Спасибо! Вы не представляете, сколько ужасно уродливого кода это убирает. - person Scott Bale; 30.06.2009

Если вы на самом деле сигнализируете о событиях, вы можете получить ViewSelection и проверить имя с помощью этого метода:

assertViewNameEquals("Your View Name", applicationView(viewSelection));
person MetroidFan2002    schedule 23.09.2009

Я не могу говорить об остальных ваших тестах или о том, как использовать Webflow, но почему вы используете contains() для проверки на равенство? Я уверен, что вы не хотите, чтобы представление «barViewBlah» соответствовало вашему тесту, не так ли?

assertEquals("barView", view.toString());
person matt b    schedule 28.04.2009
comment
Я согласен, что это грубо, поэтому я ищу лучший способ. В этом случае toString объекта View имеет вид [MockViewFactoryCreator.MockView@1b0889a viewId = 'barView'], поэтому я не могу провести прямое сравнение, и нет (очевидного) API для извлечения этого значения 'barView'. - person Scott Bale; 28.04.2009
comment
Если вы используете MockView, дает ли он вам средство доступа для viewName? - person matt b; 28.04.2009
comment
Не вариант — MockView — это внутренний класс MockViewFactoryCreator, который виден только пакету. Я мог бы использовать отражение, но это отстой примерно столько же. - person Scott Bale; 28.04.2009