Sto usando JMockit 1.1 e tutto ciò che voglio fare è richiamare un metodo privato e testare il valore restituito. Tuttavia, ho difficoltà a capire esattamente come farlo dall'esempio JMockit De-Encapsulation.Invocazione di un metodo privato tramite JMockit per verificare il risultato
Il metodo che sto cercando di testare è il metodo privato in questa classe:
public class StringToTransaction {
private List<String> parseTransactionString(final String input) {
// .. processing
return resultList;
}
}
E il mio codice di prova è inferiore.
@Test
public void testParsingForCommas() {
final StringToTransaction tested = new StringToTransaction();
final List<String> expected = new ArrayList<String>();
// Add expected strings list here..
new Expectations() {
{
invoke(tested, "parseTransactionString", "blah blah");
returns(expected);
}
};
}
E l'errore che sto ottenendo è:
java.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter
Forse mi hanno frainteso l'intera API qui, perché non credo di voler deridere la classe .. basta verificare il risultato di chiamando il metodo privato.
Ciao @JeffOlson - su quale classe è il metodo invoke()? Su Expectations, invoke() è un metodo di istanza protetto. O forse basta usare java.lang.reflect.Method.invoke() e ignorare completamente JMockit .. –
Finalmente capisco ... è 'Deencapsulation.invoke', grazie a @JeffOlson e grazie a Rogerio in https: // groups. google.com/d/msg/jmockit-users/oEgjW0DfmgU/3pEE1mjt1ncJ. –
Sì, è corretto. Scusa per non essere più chiaro, ma hai usato 'invoke()' direttamente nel tuo esempio iniziale (presumibilmente tramite un'importazione statica), quindi ho pensato di lasciarlo così com'è. Aggiornerò la mia risposta per essere più chiara per chiunque altro possa leggere questo in futuro. –