Как с помощью mockito подменить вызов метода который ни чего не возвращает

Пытаюсь с помощью mockito подменить вызов метода, который возвращает void. Код сильно упростил, чтобы уменьшить его. Имеется сервис

@Service
public class CalService {
  public void createTable(DataAtributes attr) {
    ...
  }
  public Integer addAttr(DataAtributes attr) {
    return 0;
  }
}

и еще один класс, который вызывает метод из CalService

@Component
public class GetCalcService {
  @Autowired
  private CalService calService ;
  DataAtributes dataAtributes;
  public Integer setCalc() {
    dataAtributes = new DataAtributes(1,"test");
    Integer val = calService.addAttr(dataAtributes);
    calService.createTable(dataAtributes);
    return val;
  }
}

и сам класс тестирования

@SpringBootTest
public class CaclServisTest {
  @Mock
  CalService calcService;
  @InjectMocks
  GetCalcService getCalcService ;
  @Test
  void add() {
    DataAtributes dataAtributes = new DataAtributes(1,"test");
    when(calcService.addAttr(dataAtributes)).thenReturn(57);
    Integer calc = getCalcService.setCalc();
    log.info("calc = " + calc);      
  }
}

С методом addAttr все получилось. А вот как мне подменить вызов метода calService.createTable(dataAtributes) или сделать, так чтобы он не вызывался в тесте? Просто подменить метод setCalc нельзя, на самом деле в нем идет вызов нескольких методов и только один из них (createTable) необходимо подменить или проигногрировать.


Ответы (1 шт):

Автор решения: Roman Konoval

В Mockito есть несколько методов для работы с методами, которые возвращают void. В этом случае используйте Mockito.doNothing так:

Mockito.doNothing().when(calServiceMock).createTable(dataAttributes);
→ Ссылка