È possibile? Ho provato con EasyMock.expectLastCall().times(0);
ma EasyMock si lamenta che i tempi devono essere> = 1Verificare che il metodo di annullamento non sia stato chiamato con EasyMock
risposta
Sembra un bug per me. La classe interna Range
non consente di impostare un valore massimo inferiore a 1.
Non si può prendere in giro tale metodo e chiamare semplicemente Assert.fail()
?
sì, alla fine l'ho fatto in quel modo, vedere la mia risposta – nkr1pt
Se vi aspettate il vostro metodo non per essere chiamato, allora proprio non registrarlo. Ma sono d'accordo che non funzionerà con un bel finto.
con EasyMock 3.0, è necessario aggiungere un .anyTimes() sul expectLastCall o il test avrà esito negativo:
Expectation failure on verify: myMethod(): expected: 1, actual: 0`
sulla base di esempio nkr1pt:
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
Assert.assertFail();
return null;
}
}).anyTimes();
Il fatto che qualche metodo non è chiamato è controllato da Mock
o StrictMock
. Lanciano un'eccezione, quando viene chiamato quel metodo non registrato. Questo problema si verifica solo quando si utilizza NiceMock
s, dove vengono restituiti i valori predefiniti quando si chiama per metodi non registrati.
Quindi una soluzione può essere non utilizzare NiceMock
s.
Sono fortemente in disaccordo con la conclusione. Forse, in questo caso, il bel finto non è la scelta migliore. Ma se vuoi essere sicuro che un metodo non venga chiamato, in effetti questa è l'unica cosa che vuoi testare, è meglio enfatizzare questo aspetto con un metodo mocked che fallisce con un messaggio appropriato. – qben
È una buona argomentazione. Volevo segnalare questo, poiché mi sono imbattuto in perché non posso specificare 'times (0)'. E solo più tardi mi sono reso conto che quel tipo di contraddizioni con l'idea di una bella beffa, e non un bel scherzo, non permettono di eseguire metodi non registrati. Lanciare un'eccezione di assert come la risposta sembrava più una soluzione per me e che le chiamate al metodo 0 dovrebbero essere specificate usando mazzi non piacevoli. Forse sono un po 'assertivo nella conclusione. Lo correggerò e basta. – Vic
È possibile utilizzare .andThrow(new AssertionFailedError()).anyTimes();
- questa è la stessa eccezione che genera Assert.fail()
, ma è meno dettagliata di un Answer
.
Forse aggiungendo una buona descrizione sul perché il test fallito migliora ulteriormente questa soluzione (che è la migliore di tutte dato qui IMO). – qben
Vedere http://stackoverflow.com/questions/859031/easymock-void-methods, non è sicuro che si tratti di un dupe. – philant
Non è un duplicato. – hiergiltdiestfu