2012-03-23 3 views
0

간단한 질문 :mockito를 사용한 GWT 테스트

확인 (1)이 통과했습니다. 확인 (2)하지 않습니다. 왜? 그것을 고치는 방법?

테스트 버튼이 밖으로 조롱하고대로 FireEvent 호출 할 때 무엇을 말하고 어떤 구현이없는

@Inject 
    public MyWidget(EventBus eventBus, View view, GreetingServiceAsync service){ 
     this.view = view; 
     this.service = service; 

     bindView(); 
     bindEventBus(); 

    } 

    private void bindView(){ 

     view.getButton().addClickHandler(new ClickHandler() { 

      @Override 
      public void onClick(ClickEvent event) { 
       view.alert("test"); 
      } 
     }); 

    } 

답변

0

, 당신은 버튼을 조롱하고 있습니다. 모든 능력을 상실합니다. 당신이 수동으로 사용하여 이벤트의 기능을 한 화재 ArgumentCatptor

ArgumentCaptor<ClickHandler> captor = ArgumentCaptor.forClass(ClickHandler.class); 

함으로써이 문제를 해결할 수 :

captor.getValue().onClick(null); 

이 버튼에 의해 만들어진 했어야 가짜 전화 것.

클래스에 특정 이벤트에 대해 하나의 단추 또는 하나의 캐처 만 있으면 ClickHandler 클래스를 확장 할 수 있습니다. 그런 다음 클래스의 onClick을 호출하면됩니다.

1

때문에

@Test 
    public void test() { 
      System.out.println("test"); 
      EventBus eb = mock(EventBus.class); 
      MyWidget.View v = mock(MyWidget.View.class); 
      GreetingServiceAsync s = mock(GreetingServiceAsync.class); 

      HasClickHandlers button = mock(HasClickHandlers.class); 

      when(v.getButton()).thenReturn(button); 

      new MyWidget(eb, v, s); 

      button.fireEvent(mock(ClickEvent.class)); 

      verify(button).addClickHandler(any(ClickHandler.class)); (1) 
      verify(v).alert(anyString()); (2) 


     } 

위젯. button 그래서 실제로 이벤트가 발생하지 않습니다 거기에 fireEvent를 호출, 모의 때문에

HasClickHandlers button = mock(HasClickHandlers.class); 
... 
button.fireEvent(mock(ClickEvent.class)); 
3

; 라인을 참조하십시오 onClick은보기에 호출되지 않습니다. 내가 무슨 짓을

0

: 데이비드 월러스 말했듯이

public class ClickableElement implements HasClickHandlers{ 

     ClickHandler ch; 
     @Override 
     public void fireEvent(GwtEvent<?> event) { 
      ch.onClick((ClickEvent) event); 
     } 

     @Override 
     public HandlerRegistration addClickHandler(ClickHandler handler) { 
      this.ch = handler; 
      return null;   
     } 

    };