2010-02-08 1 views
1

현재 WicketTester의 startPanel 메서드를 사용하여 패널을 테스트하고 있습니다. 이러한 패널 내에서는 종종 PageParameters를 사용하여 getPage(). getPageParameters()를 사용하여 데이터에 액세스합니다. 그러나 startPanel 메서드는 DummyPage에 대한 페이지 매개 변수를 초기화하지 않으며 페이지 매개 변수를 설정하는 기능도 제공하지 않습니다.개찰표 테스트 startPanel (Panel) 및 PageParameters - 어떻게 설정합니까?

패널 테스트 중에 페이지 매개 변수를 어떻게 설정합니까?

답변

0

페이지 및 패널이 이미 생성 된 TestPanelSource의 익명 (또는 하위 클래스)을 사용할 수 있습니다.

final WebPage parameterPage = new WebPage(pageParmeters); 
final Panel panelUnderTest = .... create panel here ....; 
parameterPage.add(panelUnderTest); 
wicketTester.startPanel(new TestPanelSource(){ 
    public Panel getTestPanel(final String panelId) { 
     return panelUnderTest; 
    } 
}); 

이 많이 사용하는 경우 TestPanelSource의 서브 클래스가 하위 클래스 '생성자와 관심의 다른 구성 항목에 매개 변수를 전달할 수 있도록 최선 수 있습니다.

1

정말 그렇게 할 수 있습니까? startPanel은 이미 우리 대신 페이지 매개 변수없이 더미 페이지를 만듭니다. 당신의 접근 방식을 사용하면 두 페이지로 패널을 부착하는데, 이는 나에게 최적의 솔루션처럼 보이지 않습니다. 지금 나는에서 startPanel와 WicketTester (패널, PageParameters) 기능 확장 :

public Panel startPanel(final TestPanelSource testPanelSource, final PageParameters parameters) { 
    return (Panel) startPage(new ITestPageSource() { 
     public Page getTestPage() { 
      return new DummyPanelPage(testPanelSource, parameters); 
     } 
    }).get(DummyPanelPage.TEST_PANEL_ID); 
} 

을 그리고 매개 변수 그것은 나를 친다

public class DummyPanelPage extends WebPage { 

    /** 
    * The dummy <code>Panel</code> <code>Component</code> id. 
    */ 
    public static final String TEST_PANEL_ID = "panel"; 

    /** 
    * Default constructor. 
    * @param testPanelSource <code>TestPanelSource</code> 
    */ 
    public DummyPanelPage(final TestPanelSource testPanelSource, final PageParameters parameters) { 
     super(parameters); 
     add(testPanelSource.getTestPanel(TEST_PANEL_ID)); 
    } 

} 

을 constrctor 페이지와 새로운 더미 패널 페이지를 만든 이유는이 기능 ISN ' 그냥 아파치에 의해 상자 밖으로 제공.

+0

+1 나의 첫번째 본능 대신에서 startPanel의 시작 페이지을하고 PageParameters을 처리하기 위해 구성된 테스트 페이지를 사용했을 것이다. 하지만 해결책이 좋습니다. –

+0

+1 나는 그것이 그것이 자신의 페이지임을 알지 못했다. 이것은 Jeroen 테스트를 작성하는 방법에 더 가깝습니다. – Matt

1

개인적으로는 getPage().getPageParameters()을 통해 PageParameters을 얻는 것이 최선의 방법이라고 생각합니다.

당신이 볼 수 있듯이 그것은 당신이 단단히 결합하고 테스트하기 힘든 당신의 패널에 의존성을 소개합니다.

당신이 당신의 Panel 내에서 PageParameters에 액세스 당신이 당신의 Panel 내에서 Parameters을 사용할 수 있습니다

private PageParameters params; 

public MyPanel (String id, Model<T> model, PageParameters params) { 
    super(id, model); 
    this.params = params; 
    ... 
} 

이 방법의 라인을 따라 이들, 무언가를 받아들이는 생성자를 만들어 그들에게 주입해야하는 경우, 구성 PanelPageParameters을 함께 사용하면 테스트에서 상상할 수 있고 불리한 것으로 판명 된 커플 링을 피할 수 있습니다.