Как смоделировать сложные критерии запроса с помощью mockito - PullRequest
0 голосов
/ 14 мая 2019

Я пишу тестовый пример junit для метода на уровне доступа к данным, как поставить / проверить сложный запрос, используя mockito?

проверил следующие ссылки о том, как заглушить сложный запрос: - https://howtodoinjava.com/hibernate/hibernate-criteria-queries-tutorial/ - https://github.com/MorphiaOrg/morphia/issues/933

ни один из них не соответствует моему случаю, и документация не говорит об этом много https://static.javadoc.io/org.mockito/mockito-core/2.8.9/index.html?org/mockito/Mockito.html

Фактический код:

public List<Content> getContentByParams(String entity, String channelId, String sectionId,
            Integer limit, String[] retrievedFields) {

    Query<Content> query = this.createQuery();

    if (StringUtils.isNotBlank(channelId) && StringUtils.isNotBlank(sectionId)) {


        query.and(query.criteria("name").equalIgnoreCase(entity),

        query.criteria("channel").equal(channelId),

        query.criteria("section").equal(sectionId));
            System.out.println("after===============");
    }
    if (retrievedFields != null && retrievedFields.length > 0) {
            System.out.println("retrieved fields");
            for (String field : retrievedFields) {
                query.project(field, true);
            }
        }

        if (limit == null) {
            limit = 4;
        }

        FindOptions findOptions = new FindOptions().limit(limit);

        return query.asList(findOptions);
}

Контрольный пример:

public void getContentByEntitiesAndPrimaryChannelSection() {
        FieldEnd<Criteria> mockFieldEndEntity = mock(FieldEnd.class);
        FieldEnd<Criteria> mockFieldEndChannel = mock(FieldEnd.class);
        FieldEnd<Criteria> mockFieldEndSection = mock(FieldEnd.class);

        // doReturn(mockFieldEndEntity).when(query).criteria("name");
        // doReturn(mockFieldEndChannel).when(query).criteria("channel");
        // doReturn(mockFieldEndSection).when(query).criteria("section");

        contentDAO.getContentByParams(entity, "channel_3", "section_3", 10, mockFields);

        for (String field : mockFields) {
            verify(query).project(field, true);
        }


        ArgumentCaptor<FindOptions> argument = ArgumentCaptor.forClass(FindOptions.class);

        verify(query).asList(argument.capture());

        FindOptions findOptions = argument.getValue();
        assertEquals(10, findOptions.getLimit());

        PowerMockito.verifyStatic(MongoQueryUtil.class, times(1));
    }

Я не уверен, как добавить тест для части создания запроса с текущим состоянием теста, который он проходит, но он не тестирует создание запроса. любая помощь будет оценена или если есть документация для нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...