Sto provando a stubare un metodo usando Mockito 1.8.5, ma così facendo richiama l'implementazione del metodo reale (con "" come valori di parm) che genera un'eccezione .Mockito che chiama l'implementazione del metodo reale durante il tentativo di stub metodo protetto
package background.internal; //located in trunk/tests/java/background/internal
public class MoveStepTest {
@Test
public void testMoveUpdate() {
final String returnValue = "value";
final FileAttachmentContainer file = mock(FileAttachmentContainer.class);
doReturn(returnValue).when(file).moveAttachment(anyString(), anyString(), anyString());
//this also fails
//when(file.moveAttachment(anyString(), anyString(), anyString())).thenReturn(returnValue);
final AttachmentMoveStep move = new AttachmentMoveStep(file);
final Action moveResult = move.advance(1, mock(Context.class));
assertEquals(Action.done, moveResult);
}
}
Il metodo che sto cercando di simulare assomiglia a questo. Non ci sono metodi o classi finali.
package background.internal; //located in trunk/src/background/internal
public class FileAttachmentContainer {
String moveAttachment(final String arg1, final String arg2, final String arg3)
throws CustomException {
...
}
String getPersistedValue(final Context context) {
...
}
}
E la classe sto passando gli sguardi finti come questo:
package background.internal; //located in trunk/src/background/internal
public class AttachmentMoveStep {
private final FileAttachmentContainer file;
public AttachmentMoveStep(final FileAttachmentContainer file) {
this.file = file;
}
public Action advance(final double acceleration, final Context context) {
try {
final String attachmentValue = this.file.getPersistedValue(context);
final String entryId = this.file.moveAttachment(attachmentValue, "attachment", context.getUserName());
//do some other stuff with entryId
} catch (CustomException e) {
e.log(context);
}
return Action.done;
}
}
cosa sta causando l'effettiva attuazione a essere invocate e come posso evitarlo?
È possibile aggiungere il codice che sta effettivamente eseguendo il test? – jhericks
È 'FileAttachmentContainer' o il metodo' moveAttachment() 'finale? Mockito non può prendere in giro i metodi finali. –
MoveAttachment è realmente chiamato con i valori di anyString()? – markus