2013-01-14 10 views
5

Questo è dal Tutorial JMockit ufficiale:JMockit come risultato più eccezioni per il metodo di chiamata

@Test 
    public void doSomethingHandlesSomeCheckedException() throws Exception 
    { 
     new Expectations() { 
     DependencyAbc abc; 

     { 
      abc.stringReturningMethod(); 
      returns("str1", "str2"); 
      result = new SomeCheckedException(); 
     } 
     }; 

     new UnitUnderTest().doSomething(); 
    } 

E 'possibile affermare il contrario, vale a dire più risultati e uno di ritorno - ho bisogno di buttare 2 eccezioni e solo quindi restituire un buon valore. Qualcosa di simile a questo è ciò che Im che cerca:

abc.stringReturningMethod(); 
    returns(new SomeCheckedException(), new SomeOtherException(),"third"); 

Questo non funziona, non può lanciare JMockit tali eccezioni a String (che è il tipo di ritorno di stringReturningMethod)

risposta

6

scrittura in questo modo:

abc.stringReturningMethod(); 
    result = new SomeCheckedException(); 
    result = new SomeOtherException(); 
    result = "third"; 
+2

Non imposterà il risultato per tutte e tre le chiamate come 'terzo'? – Queequeg

+0

No. Registrerà tre risultati consecutivi per 'stringReturningMethod()'. (Un "risultato" è un valore da restituire, un'eccezione da lanciare o un "delegato" da eseguire. JMockit riscrive automaticamente questi incarichi come invocazioni ai suoi metodi interni, ecco perché funziona.) –

+0

Questo non funziona. Devi fare 'result = new SomeCheckedException(); risultato = new SomeOtherException(); rendimenti ("non fa eccezione-String-valore"); ' – searchengine27

1

Non so se v'è una scorciatoia per farlo, ma si può sempre registrare che il metodo sarà chiamato più volte:

abc.stringReturningMethod(); 
result = new SomeCheckedException(); 

abc.stringReturningMethod(); 
result = new SomeOtherException(); 

abc.stringReturningMethod(); 
result = "third"; 
+0

funziona con 'NonStrictExpectations'? – Queequeg

Problemi correlati