2016-07-06 3 views
0

어떤 시점에서하려고 서명Mockito는 - 인터페이스를 구현하는 모든 인스턴스와 일치하고,

public void addActionListener(ActionListener l). 

와의 ActionListener (java.awt.event의 인터페이스)의 인스턴스를 추가하기 위해 호출되는 클래스를 비웃음 답변 답변을 사용하기 위해 메서드 호출을 모의합니다. 익명으로 만든 ActionListener 인스턴스 (예 : answer)를 사용하여 해당 ActionListeners를 추적 할 수 있습니다. 하지만 인터페이스 ActionListener의 인스턴스를 수락 할 수 없습니다.

은 지금까지 나는 아무 소용이, 다른 질문에서 몇 가지 예를 시도 :

when(mock.addActionListener(Matchers.<ActionListener>any())).thenAnswer(new Answer<Void>() { 
     @Override 
     public Void answer(InvocationOnMock invocation) throws Throwable { 
      Object[] arguments = invocation.getArguments(); 
      if (arguments != null && arguments.length > 0 && arguments[0] != null) { 
       listeners.add((ActionListener) arguments[0]); 
      } 
      return null; 
     } 
    }); 
when(mock.addActionListener(any(ActionListener.class))).thenAnswer([..snip..]); 

그들 모두를 는 방법 (무효)를 해결할 수 없다는 컴파일 오류를 제공합니다.

Matchers.any를 인터페이스를 구현하는 모든 인스턴스와 비교하고이를 대답에 사용할 수있는 방법이 있습니까? 반환 값이 무효이기 때문에 불가능합니까? Mockito 1.10를 사용

, powermock 1.6.5와 자바 7. void를 반환

+2

힌트 : PowerMock을 피하십시오. 그것은 좋은 것보다 더 많은 문제를 일으킨다. – GhostCat

답변

3

당신은 Mockito.doAnswer()을 사용할 수 있습니다, 그것은 방법에 대해 작성됩니다 (I 자바 8을 사용할 수 없습니다) :

doAnswer(new Answer<Void>() { 
    @Override 
    public Void answer(InvocationOnMock invocation) throws Throwable { 
     Object[] arguments = invocation.getArguments(); 
     if (arguments != null && arguments.length > 0 && arguments[0] != null) { 
      listeners.add((ActionListener) arguments[0]); 
     } 
     return null; 
    } 
}).when(mock).addActionListener(Matchers.<ActionListener>any()); 
doAnswer([..snip..]).when(mock).addActionListener(any(ActionListener.class)) 
+0

첫 번째 오류는 동일한 컴파일 오류를 발생시킵니다. 두 번째 것은 나를 위해 그것을했다, 고마워! 이유가 무엇인지 이해하는 데 문제가 있습니다 (mock.addActionListener (any (ActionListener.class))) thenAnswer ([snip]); 이 작동하지 않습니다. 하지만 doAnswer가 먼저 실행되면 작동합니다. 주의를 기울여야겠습니까? 미리 감사드립니다 !! – Chikitulfo