JUnit Как смоделировать с различными значениями параметра объекта? - PullRequest
0 голосов
/ 28 сентября 2018

Ниже приведен мой тестовый код с использованием JUnit Mockito:

@Before
public void preSetup() throws Exception {   
    AuditTrail auditTrail = new AuditTrail();
    auditTrail.setEventType(1);
    auditTrail.setEventDetail("play");
    auditTrail.setEventDate(new Date());

    Mockito.doReturn(auditTrail).when(auditService).addAuditTrail(auditTrail);
}

@Test
public void testaddPlayAuditRecord() {

    boolean value = auditService.addPlayAuditRecord();
    assertEquals(true, value);
}

И мой сервис выглядит следующим образом:

@Override
public boolean addPlayAuditRecord() {
    return addAuditRecord(1,"play");
}

@Override
public boolean addDeleteAuditRecord() {
    return addAuditRecord(2,"delete");
}

@Override
public boolean addSearchAuditRecord() {
    return addAuditRecord(3,"search");
}


private boolean addAuditRecord(String eventType, String eventDetail) {
    AuditTrail auditTrail = new AuditTrail();
    auditTrail.setEventType(eventType);
    auditTrail.setEventDetail(eventDetail);
    auditTrail.setEventDate(new Date());

    AuditTrail obj = auditService.addAuditTrail(auditTrail);
}

auditService.addAuditTrail (auditTrail) делаетвызов базы данных, который я хочу смоделировать и вернуть объект со значениями по моему выбору.

Но этот объект auditTrail построен на значениях, которые зависят от того, какой метод его вызывает.Они различаются в зависимости от того, какой метод вызывает метод addAuditRecord.Также мы используем new Date (), чтобы получить объект текущей даты.Таким образом, дата, которую я буду использовать в тесте, будет отличаться от той, что я буду использовать в addAuditRecord, так как дата является текущей датой.

Итак, как в моем тестовом файле как насмехаться над этим методом addAuditTrail?Можно ли сделать такое издевательство в методе @Before?Переданный здесь объект auditTrail должен соответствовать объекту, который фактически создан в методе addAuditRecord.

Как мне это сделать?

1 Ответ

0 голосов
/ 28 сентября 2018

Вы пробовали это?

Mockito.doReturn(auditTrail).when(auditService)
                   .addAuditTrail(ArgumentMatchers.any(AuditTrail.class));

Таким образом вы запускаете это правило каждый раз, когда передаете объект AuditTrail, независимо от его внутренних значений.

Для вашей версии Mockito просто используйте:

Mockito.doReturn(auditTrail).when(auditService)
                   .addAuditTrail(Matchers.any(AuditTrail.class));
...