Daniela Morais
Daniela Morais

Reputation: 2237

Error when I trying mock a repository

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

Answers (1)

Ori Marko
Ori Marko

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

Related Questions