2009-04-28 48 views
2

我正在開發一個Spring webflow,試圖使用TDD,所以我擴展了AbstractXmlFlowExecutionTests。我看不出一個明顯的方式來斷言我認爲會是一件簡單的事情:視圖狀態具有給定名稱的相關視圖。例如,給定該流程(摘錄):在Spring Webflow單元測試中,您如何斷言視圖狀態具有給定名稱的視圖?

<?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方式?

回答

1

您可以使用此:

assertResponseWrittenEquals("barView", context); 

哪裏context是你MockExternalContext

這就是我總是測試這個方法。

-1

我不能說你的其他測試,或如何使用Webflow,但爲什麼你使用來測試平等?我確定你不希望「barViewBlah」的視圖符合你的測試,是嗎?

assertEquals("barView", view.toString()); 
+0

我同意它的毛,這就是爲什麼我在尋找一種更好的方式。在這種情況下,View對象的toString是[[email protected] viewId ='barView'],所以我無法進行直接比較,也沒有(明顯的)API來檢索'barView'值。 – 2009-04-28 15:23:15

+0

如果您投射到MockView,它是否爲您提供viewName的存取器? – 2009-04-28 15:52:49

1

如果你實際上是信號事件,你可以得到ViewSelection,並通過這種方法來檢查名稱:

assertViewNameEquals("Your View Name", applicationView(viewSelection));