簡體   English   中英

無論使用 mockito 的參數如何模擬存儲庫方法

[英]How to mock a repository method no matter the parameters with mockito

我正在使用 spring 框架並使用 Junit 和 mockito 進行測試。

現在我的服務中有一個方法,它使用了我在測試中創建的一些對象,我們稱它們為 configObject1 和 configObject2,我將它們作為參數發送給該方法,然后該方法開始對另一個存儲庫進行一些調用那些配置對象,那些存儲庫被模擬並且運行良好,該方法從這些查詢/配置對象中創建一個“CalculusResult”列表。 之后,我使用擴展 CRUDRepository 的存儲庫並創建 saveAll()。 然后它應該返回一個帶有實體的可迭代對象,但由於某種原因,在 saveAll 方法之后它返回一個空列表。

測試:

@Test
...
configObject1 conf1 = new configObject1 (...);
configObject2 conf2 = new configObject2 (...);
Calculusresult calcRes = new CalculusResult(null,...,new java.sql.Date(system.currentTimeMilis()),...);
List<CalculusResult> resList= new ArrayList<CalculusResult>();
resList.add(calcRes);

Calculusresult calcRes2 = new CalculusResult(1,...,new java.sql.Date(system.currentTimeMilis()),...);
List<CalculusResult> resList2= new ArrayList<CalculusResult>();
resList2.add(calcRes2);

when(calculusResultRepository.saveAll(resList)).thenReturn(resList2);
...
assertTrue(!response.isEmpty())

來自服務的方法:

...//The method is building the list of calculusResults
resCalc.setDate(new java.sql.Date(system.currentTimeMilis()))
resList.add(calcres);//CalculusResult object is added to the list, this object is well made
List<CalculusResult> savedResults = (List<CalculusResult>) calculusResultRepository.saveAll(resList); //This returns an empty list (If I don't cast, it also returns nothing)

for(CalculusResult calcres : savedResults){
... //This makes nothing because savedResults is empty, making the response empty and failing the test.

存儲庫:

@Repository
public interface CalculusResultRepository extends CrudRepository<CalculusResult, Long> {

}

我不確定,但我認為問題可能是我在測試中創建的 object 與服務中的不同,因為其中一個屬性是 sql 它創建的那一刻的日期,所以它可能沒有觸發測試中的“when(calculusRepository.saveAll(reslist)...”,因為在測試中創建的 object 和在服務中創建的 object 在該屬性中具有不同的日期。

如果是這種情況,有沒有辦法解決它? 還是問題完全不同?

您可以使用 Mockito ArgumentMatchers 來匹配任何參數。

when(calculusResultRepository.saveAll(Mockito.any(List.class))).thenReturn(resList2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM