Как смоделировать метод void, который принимает фиктивный объект и ожидает установки некоторого значения для экземпляра фиктивного объекта - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть код, в котором мне нужно передать любой экземпляр фиктивного объекта некоторого типа в метод, и я хочу, чтобы тот же экземпляр фиктивного экземпляра возвращал некоторые значения.

Поскольку это пустой метод, я использую doAnswer, чтобы установить некоторые значения для переданного аргумента. В этом случае аргумент является поддельным объектом.

Теперь вопрос в том, есть ли способ, которым я могу установить значение для смоделированного объекта и использовать тот же экземпляр для подтверждения чего-либо?

Я пытался с doAnswer для метода void. Есть ли другой способ добиться этого?

doAnswer(new Answer() {
    ManageKit manageKit = new ManageKit();

    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        Object[] arguments = invocation.getArguments();
        if (arguments != null && arguments.length == 1 && arguments[0] != null ) {
            manageKit = (ManageKit)arguments[0];
            manageKit.setStudySchemaEventId(12);
        }
        return manageKit;
    }
}).when(mockManageKitsDao).retrieveInterventionEventId(any(ManageKit.class), any(Connection.class));
TileInfo tileInfo = doubleBliService.getTileInfo(9500, 5);
assertThat(manageKit.getStudySchemaEventId()).isEqualTo(12);

Я не могу передать объект ManageKit напрямую, так как он создает объект внутри метода. что-то вроде ниже:

public TileInfo getTileInfo(int studyId, int caseDetailId) {
.......
........
ManageKit manageKit = new ManageKit();
manageKit.setCaseDetailId(caseDetailId);
manageKitsDao.retrieveInterventionEventId(manageKit, connection);
int armStudySchemaEventId = 0;
if (manageKit.getStudySchemaEventId() != null && manageKit.getStudySchemaEventId() != 0) {
    armStudySchemaEventId = manageKit.getStudySchemaEventId();
}

1 Ответ

1 голос
/ 29 апреля 2019

Mockito предоставляет механизм для получения экземпляра объекта, переданного в поддельный метод: ArgumentCaptor .

В вашем конкретном случае (схематично):

// configure
doAnswer(answer).when(mockManageKitsDao).retrieveInterventionEventId(any(ManageKit.class), any(Connection.class));
// act
TileInfo tileInfo = doubleBliService.getTileInfo(9500, 5);
// verify
ArgumentCaptor<ManageKit> argumentCaptor = ArgumentCaptor.forClass(ManageKit.class);
verify(mockManageKitsDao).retrieveInterventionEventId(argumentCaptor.capture(), any(Connection.class));
ManageKit manageKit = argumentCaptor.getValue();
assertThat(manageKit.getStudySchemaEventId()).isEqualTo(12);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...