Sto cercando di sostituire JMock con Mockito (1.10.17). Ho già fatto alcuni test di unità con successo, ma ora voglio utilizzare la funzione di timeoutjava.lang.VerifyError con Mockito 1.10.17
verify(publisher, timeout(5000)).notifySubscribers(any(BecameMasterMessage.class));
e ottengo questa eccezione:
java.lang.VerifyError: (class: org/mockito/internal/verification/VerificationOverTimeImpl, method: verify signature: (Lorg/mockito/internal/verification/api/VerificationData;)V) Incompatible argument to function
at org.mockito.verification.Timeout.<init>(Timeout.java:32)
at org.mockito.verification.Timeout.<init>(Timeout.java:25)
at org.mockito.Mockito.timeout(Mockito.java:2164)
Il problema si verifica in IntelliJ e con Maven. C'è solo una versione di Mockito sul classpath. C'è anche JMock 2.5.1 sul classpath che non posso rimuovere dal momento che il 99% dei miei test di unità usano ancora JMock in questo momento. Non so se questo ha qualcosa a che fare con questo.
AGGIORNAMENTO: Ho provato con JMock 2.6.0 e Hamcrest 1.3 ma il risultato è lo stesso.
UPDATE 2:
Questo funziona:
Thread.sleep(5000);
verify(m_publisher).notifySubscribers(any(BecameMasterMessage.class));
E questo non lo fa:
verify(publisher, timeout(5000)).notifySubscribers(any(BecameMasterMessage.class));
UPDATE 3: ho fatto un piccolo progetto di prova che ha lo stesso identico problema : Vedi https://github.com/wimdeblauwe/mockito-verify-problem ed eseguilo da IntelliJ o con Maven.
Questa è una stupida domanda "spegni e riaccendi", ma ti viene chiesto: hai ripulito gli artefatti della compilation? Anche se esiste una sola versione di Mockito sul classpath, VerificationOverTimeImpl viene ribattezzato di recente da VerificationWithTimeoutImpl 1.9.5 e se hai mai usato 1.9.5 o precedente, un file di una classe persistente potrebbe buttare via tutto. –
@JeffBowman Ho fatto un 'mvn clean install' per assicurarmi che non fosse questo il problema. Ora ho modificato la domanda con un collegamento a un progetto di esempio che mostra il problema. –