2009-04-28 10 views
2

Ich entwickle einen Spring-Webflow und versuche, TDD zu verwenden, also habe ich AbstractXmlFlowExecutionTests erweitert. Ich kann keinen offensichtlichen Weg sehen, etwas zu behaupten, was ich für eine einfache Sache gehalten hätte: dass ein View-State eine assoziierte Sicht auf einen bestimmten Namen hat. Zum Beispiel, da diese Strömung (Auszug):Im Frühling Webflow-Unit-Test, wie können Sie feststellen, dass ein Ansichtszustand eine Ansicht eines bestimmten Namens hat?

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

und Unit-Test

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")); 
} 

Gibt es einen einfacheren Weg, diesen Zustand zu behaupten foo Ansicht hat barView?

Antwort

1

Sie können diese verwenden:

assertResponseWrittenEquals("barView", context); 

Wo context ist Ihr MockExternalContext.

So teste ich das trotzdem immer.

+0

Vielen Dank! Sie haben keine Ahnung, wie viel abscheulich hässlichen Code dies aufräumt. –

-1

Ich kann nicht mit dem Rest Ihrer Tests sprechen, oder wie Sie Webflow verwenden, aber warum verwenden Sie , um auf Gleichheit zu prüfen? Ich bin mir sicher, dass Sie keine Ansicht von "barViewBlah" wünschen, die zu Ihrem Test passt, oder?

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

Ich bin damit einverstanden, es ist gross, das ist, warum ich nach einem besseren Weg suchen. In diesem Fall ist der toString des View-Objekts [[email protected] viewId = 'barView'], daher kann ich keinen direkten Vergleich durchführen und es gibt keine (offensichtliche) API, um diesen 'barView'-Wert abzurufen. –

+0

Wenn Sie nach MockView umwandeln, erhalten Sie einen Accessor für viewName? –

+0

Keine Option - MockView ist eine innere Klasse von MockViewFactoryCreator, die nur Paket-sichtbar ist. Ich könnte Reflexionen verwenden, aber das ist ungefähr genauso viel. –

1

Wenn Sie tatsächlich Ereignisse signalisiert, können Sie die bekommen und die Ansichten über überprüfen Sie den Namen über diese Methode:

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