Мокито `когда` на реальном объекте - PullRequest
2 голосов
/ 11 января 2020

Я хочу издеваться над классом Дао, когда объект содержит определенные c значения. Например, я хочу смоделировать вызов базы данных, когда 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
}

userlistBo объект на маркере 1 выглядит следующим образом:

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

userlistBo на маркере 2:

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, userlistBo возвращается как null.

Как я должен насмехаться над маркером 4, поэтому, когда Dao вызывается на маркере 3, он будет верните мне expectedUserlistStatusDoneBo вместо null?

1 Ответ

0 голосов
/ 13 января 2020

Объект в коде приложения равен

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 состоянии, равенство вышестоящего объекта не выполнено. Чтобы решить эту проблему, добавлены equals () и hashcode () в объекте UserlistBo.

@ xerx593 спасибо за указание

...