Reputation: 2237
I tried mock a repository and return the same object that was saved.
This is my code snippet:
public TransactionType createTransactionType(TransactionTypeEnum type) {
TransactionType transactionType = new TransactionType();
transactionType.setStatus(type.code());
transactionType.setDescription(type.name());
return transactionTypeRepository.save(transactionType);
}
I tried mock something like this:
1.
public TransactionTypeRepositoryMockBuilder doSave(){
Mockito.when(this.target.save(Mockito.any(TransactionType.class)))
.then(new SaveMock<>())
.then(AdditionalAnswers.returnsFirstArg());
return this;
}
2.
public TransactionTypeRepositoryMockBuilder doSave(){
Mockito.when(this.target.save(Mockito.any(TransactionType.class))).then(new SaveMock<>());
return this;
}
3.
public TransactionTypeRepositoryMockBuilder doSave(){
Mockito.when(this.target.save(Mockito.any(TransactionType.class))).thenReturn(new TransactionType());
return this;
}
4.
public TransactionTypeRepositoryMockBuilder doSave(){
Mockito.when(this.target.save(Mockito.any(TransactionType.class))).then(AdditionalAnswers.returnsFirstArg());
return this;
}
My builder class
public class TransactionTypeRepositoryMockBuilder {
private final TransactionTypeRepository target;
private TransactionTypeRepositoryMockBuilder() {
this.target = Mockito.spy(TransactionTypeRepository.class);
}
public static TransactionTypeRepositoryMockBuilder create(){
return new TransactionTypeRepositoryMockBuilder();
}
public TransactionTypeRepository build() {
return this.target;
}
public TransactionTypeRepositoryMockBuilder doSave(){
Mockito.when(this.target.save(Mockito.any(TransactionType.class))).thenReturn(new TransactionType());
return this;
}
}
I received this error: _java.lang.NoSuchMethodError: org.mockito.invocation.InvocationOnMock.getArgumentAt(ILjava/lang/Class;)Ljava/lang/Object;_ What I did wrong?
Upvotes: 2
Views: 2101
Reputation: 58772
There was an update in mockito-2.1. The method getArgumentAt()
takes different parameters. So you must have inconsistency in your mockito jars.
when(userDeviceService.save(any(UserDevice.class))) .then(invocation -> invocation.getArgumentAt(0, UserDevice.class)); Now:
when(userDeviceService.save(any())) .then(invocationOnMock -> invocationOnMock.getArgument(0));
Upvotes: 3