Как проверить локальные переменные в общедоступном методе, который возвращает тип void?

Мой CUT имеет общедоступный метод sync(), который возвращает void и использует некоторые переменные, такие как syncContactEnabled, которые они задают с помощью spring и файла свойств. это мой ВЫРЕЗ:

public class ContactSyncServiceImpl implements SyncService {

 public void sync() {
        long start = System.currentTimeMillis();
        logger.info("-----sync() start:{}", start);
        if (!syncContactEnabled) {      //***********first: want to test this if
            logger.info("Contact sync isn't enabled.");
            return;
        }

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
        Date now = new Date();
        Date startDate = null;
        String contactSyncStartDateConfig = configService.get(CONTACT_SYNC_START_DATE);
        if (StringUtils.isBlank(contactSyncStartDateConfig)) {       \\**********second: I want to test startDate value in this if-else
            startDate = new Date(now.getTime() - syncStartDaysCount * 24 * 60 * 60 * 1000l);
        } else {
            try {
                startDate = formatter.parse(contactSyncStartDateConfig);
            } catch (Exception e) {
                logger.warn("There's a problem parsing date:" + e);
            }
        }


/////////It is NOT complite code of class.......(:
}

Первый вопрос:

  • Как я могу издеваться над некоторыми переменными, такими как syncContactEnabled, которые установлены в файле свойств?

второй вопрос:

  • Как я могу проверить внутренний способ метода sync(), например, как я могу проверить значение startDate в условии if-else?

и, наконец, это мой файл свойств:

sync.contact.enabled=false
sync.page.size=100
sync.cron=0 30 6,18 * * ?
#*/1 * * * * *
sync.start.days.count=365

person m.mjn202    schedule 02.05.2017    source источник
comment
Как объявлена ​​переменная syncContactEnabled?   -  person talex    schedule 02.05.2017
comment
Почему вы хотите протестировать startDate? Он бесполезен (вы никогда не используете его значение) и должен быть удален из кода.   -  person talex    schedule 02.05.2017
comment
@talex, этот код не является составным кодом, я использую его в продолжении класса.   -  person m.mjn202    schedule 02.05.2017


Ответы (1)


Первый вопрос:

  • Как я могу издеваться над некоторыми переменными, такими как «syncContactEnabled», которые установлены в файле свойств?

Вы не знаете.

второй вопрос:

  • Как я могу протестировать внутренний способ метода «sync ()», например, как я могу проверить значение «startDate» в условии if-else?

Вы тоже не знаете.

При модульном тестировании вы проверяете общедоступное наблюдаемое поведение, что означает: какие результаты возвращаются в зависимости от ввода и как устройство взаимодействует с< /em> его зависимости.

Переменная syncContactEnabled — это деталь реализации, которую вы не проверяете. Это связано с тем, что он может измениться без изменения поведения юнитов, и вы не хотите изменять тест в этом случае.


Я думаю, я просто могу использовать какой-нибудь тест, например: PowerMockito.donothing или PowerMockito.verify..... да???? и я не могу проверить внутреннюю манеру... – m.mjn202

Ни в коем случае не используйте PowerMock(-ito). В большинстве случаев потребность в PowerMock(-ito) является признаком плохого дизайна и отсутствия внедрения зависимостей.

Обычно вы издеваетесь над зависимостями, другими классами, с которыми взаимодействует ваш модуль. Единственным исключением является то, что ваш модуль является абстрактным классом.

Конфигурация doNothing(mock).someMethod() необходима, если вы издевались над реальным классом (вместо интерфейса) и вам нужно запретить вызов метода (someMethod()) (например, потому что он подключается к базе данных...)

person Timothy Truckle    schedule 02.05.2017
comment
Спасибо... Я думаю, я просто могу использовать какой-нибудь тест, например: PowerMockito.donothing или PowerMockito.verify..... да???? и я не могу проверить внутреннюю манеру... - person m.mjn202; 02.05.2017
comment
Обновил ответ. - person Timothy Truckle; 02.05.2017
comment
Опять же: я хотел бы поставить 5 голосов за то, что мне не нравятся некоторые насмешливые фреймворки. - person GhostCat; 02.05.2017