簡體   English   中英

Mockito `when` 在真實物體上

[英]Mockito `when` on real object

當對象包含特定值時,我想模擬 Dao 類。 例如,我想在userlist.getStatus == UserlistStatus.DONE時模擬對數據庫的調用

如果附上代碼片段。

我的應用程序代碼如下:

UserlistBo userlistBo = userlistDao.getByIdAndPublisherId(userlistId, publisher.getId());
if (userlistBo.getStatus() == UserlistStatus.SOURCE_IN_PROGRESS && userlistStatusDto.getStatus().equalsIgnoreCase(UserlistStatus.DONE.getValue())) {
    userlistBo.setStatus(UserlistStatus.DONE); // 1
    userlistBo = userlistDao.save(userlistBo); // 3
}

標記 1 處的 userlistBo 對象如下:

result = {UserlistBo@1610} "UserlistBo{id=1, name='ul-test-99-9999', status=DONE, source=SEGMENT, ruleId=1, publisherId=1, filename=filename.csv, createdById=null, lastModifiedById=null, creationTimestamp=null, lastModifiedTimestamp=null}"

我的測試代碼如下:

expectedUserlistBo.setId(1);
expectedUserlistBo.setName("ul-test-99-9999");
expectedUserlistBo.setPublisherId(1);
expectedUserlistBo.setRuleId(1);
expectedUserlistBo.setFilename("filename.csv");
expectedUserlistBo.setSource(UserlistSource.SEGMENT);
expectedUserlistBo.setStatus(UserlistStatus.SOURCE_IN_PROGRESS);
when(userlistDao.getByIdAndPublisherId(1, publisherBo.getId())).thenReturn(expectedUserlistBo);


UserlistBo expectedUserlistStatusDoneBo = new UserlistBo();
CopyHelperBean.copy(expectedUserlistStatusDoneBo, expectedUserlistBo);
expectedUserlistStatusDoneBo.setStatus(UserlistStatus.DONE); // 2
when(userlistDao.save(expectedUserlistStatusDoneBo)).thenReturn(expectedUserlistStatusDoneBo); // 4

標記 2 處的 userlistBo 是:

result = {UserlistBo@1514} "UserlistBo{id=1, name='ul-test-99-9999', status=DONE, source=SEGMENT, ruleId=1, publisherId=1, filename=filename.csv, createdById=null, lastModifiedById=null, creationTimestamp=null, lastModifiedTimestamp=null}"

由於這兩個是具有相同值的不同對象,因此在標記 3 處執行 test 時, userlistBo 返回為null

我應該如何模擬標記 4,所以當在標記 3 處調用 Dao 時,它會返回我expectedUserlistStatusDoneBo而不是null

應用程序代碼中的對象是

result = {UserlistBo@1610} "UserlistBo{id=1, name='ul-test-99-9999', status=DONE, source=SEGMENT, ruleId=1, publisherId=1, filename=filename.csv, createdById=null, lastModifiedById=null, creationTimestamp=null, lastModifiedTimestamp=null}"

在測試代​​碼中創建的虛擬對象是

result = {UserlistBo@1514} "UserlistBo{id=1, name='ul-test-99-9999', status=DONE, source=SEGMENT, ruleId=1, publisherId=1, filename=filename.csv, createdById=null, lastModifiedById=null, creationTimestamp=null, lastModifiedTimestamp=null}"

雖然值相同,但這兩個是不同的對象

when(userlistDao.getByIdAndPublisherId(1, publisherBo.getId())).thenReturn(expectedUserlistBo);

when條件下,上面與對象的相等性失敗。 為了解決這個問題,在 UserlistBo 對象中添加了 equals() 和 hashcode()。

@xerx593 感謝您指出

暫無
暫無

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

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