2017-08-03 38 views
0

我試圖模擬一個存儲庫並返回保存的同一個對象。當我嘗試模擬存儲庫時出錯

這是我的代碼片段:

public TransactionType createTransactionType(TransactionTypeEnum type) { 
     TransactionType transactionType = new TransactionType(); 
     transactionType.setStatus(type.code()); 
     transactionType.setDescription(type.name()); 

     return transactionTypeRepository.save(transactionType); 
} 

我試圖假裝是這樣的:

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; 

    } 

我的生成器類

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; 
    } 

} 

我收到此錯誤: _java.lang.NoSuchMethodError:org.mockito.invocation.InvocationOnMock.getArgumentAt(ILjava/lang/Class;)Ljava/lang/Object; _ 我做錯了什麼?

+0

你是什麼mockito版本? – user7294900

+0

這是Mockito 2.8.47 –

+0

我發現你的輸入完全令人困惑。你爲什麼要在稱爲doSave()的方法中設置你的模擬?因此:請退後一步並向我們展示一個真實的[mcve] - 包括生產和測試用例代碼的基本部分。你在這裏展示的只是沒有多大意義(imho)。 – GhostCat

回答

0

mockito-2.1中有一個update。方法getArgumentAt()採用不同的參數。所以你必須在你的mockito罐子裏有不一致的地方。

when(userDeviceService.save(any(UserDevice.class))) .then(invocation -> invocation.getArgumentAt(0, UserDevice.class)); Now:

when(userDeviceService.save(any())) .then(invocationOnMock -> invocationOnMock.getArgument(0));

+0

方法簽名有一個真正的改變。請參閱https://static.javadoc.io/org.mockito/mockito-core/2.7.9/org/mockito/invocation/InvocationOnMock.html與https://static.javadoc.io/org.mockito/mockito-core /1.10.19/org/mockito/invocation/InvocationOnMock.html – user7294900

+1

更新了我的回答 – user7294900

相關問題