2009-04-28 2 views
2

TDD를 사용하려고하는 Spring 웹 플로우를 개발 중이므로 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

이를 사용할 수 있습니다 contextMockExternalContext

assertResponseWrittenEquals("barView", context); 

입니다.

어쨌든 나는 이것을 항상 테스트하는 방법입니다. 당신이 실제로 이벤트를 신호하는 경우

+0

감사합니다. 이 코드가 얼마나 끔찍하고 추악한 코드인지는 알지 못합니다. –

-1

나머지 테스트 나 웹 플로우 사용법은 말할 수 없지만 을 사용하여 동등한 테스트를하는 이유는 무엇입니까? "barViewBlah"에 대한 견해가 당신의 검사와 일치하지 않길 바랄 것입니다. 그렇습니까?

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

을 나는 그것이 총의 동의, 내가 더 좋은 방법을 찾고 있어요 그 이유는. 이 경우 View 객체의 toString은 [[email protected] viewId = 'barView']이므로 직선 비교를 수행 할 수 없으며 해당 'barView'값을 검색 할 API가 없습니다. –

+0

MockView로 캐스팅 한 경우 viewName에 접근자를 제공합니까? –

+0

옵션 없음 - MockView는 MockViewFactoryCreator의 내부 클래스이며 패키지에서만 볼 수 있습니다. 리플렉션을 사용할 수는 있지만 대략 같은 양이 듭니다. –

1

, 당신은 ViewSelection를 얻을이 방법을 통해 이름을 확인할 수 있습니다

assertViewNameEquals("Your View Name", applicationView(viewSelection)); 
관련 문제