2016-07-06 12 views
0

eine Klasse Mocking die aufgerufen wird, an einem gewissen Punkt eine Instanz von Action (die Schnittstelle in java.awt.event) hinzuzufügen, mit UnterschriftMockito - passt zu jeder Instanz eine Schnittstelle implementiert, und beantworten

public void addActionListener(ActionListener l). 

Der Versuch, Mache den Methodenaufruf, um eine Antwort zu verwenden, damit ich seine ActionListeners verfolgen kann, wenn sie mit anonym erstellten Instanzen von ActionListener aufgerufen wird (genau wie in diesem answer). Aber ich kann keine Instanz des Interfaces ActionListener akzeptieren.

Bisher habe ich einige Beispiele aus anderen Fragen versucht, ohne Erfolg:

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..]); 

alle von ihnen Kompilierungsfehlern geben sagen nicht Methode lösen kann, wenn (void).

Gibt es eine Möglichkeit, Matchers.any mit jeder Instanz zu vergleichen, die die Schnittstelle implementiert, und sie für die Antwort verwenden? Ist das nicht möglich, weil der Rückgabewert ungültig ist?

Mockito Mit 1,10, PowerMock 1.6.5 und Java 7. (Ich kann nicht Java verwenden 8)

+2

Hint : Versuchen Sie, PowerMock zu vermeiden. Es verursacht mehr Probleme als gut. – GhostCat

Antwort

3

Sie Mockito.doAnswer() verwenden können, ist es für Methoden erstellt void Rückkehr:

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

Der erste gibt den gleichen Kompilierungsfehler. Der zweite hat es aber für mich getan, Danke! Ich habe Probleme zu verstehen, warum wenn (mock.addActionListener (any (Actionlistener.class))). ThenAnswer ([snip]); funktioniert nicht. Aber wenn doAnswer an erster Stelle steht, dann funktioniert es. Um Klarheit zu bitten? Danke im Voraus!! – Chikitulfo

Verwandte Themen