Ребята, вдруг вам стало скучно, а у меня для вас есть задачка:
Пусть есть триггер на опп-ти, который отправляется запрос в гугл, также есть воркфлоу, который на любое дествие обновляет имя опп-ти на имя аккаунта.
Задача очень проста: написать тест, что запрос прошел и тело запроса соответствует желаемому.
Примечание: воркфлоу модифицировать и удалять нельзя.
P.s. я часто общаюсь/собеседую СФ программистов, вот и приходится придумывать простенькие задачки. =)
Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию.
Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O
Вот интересно как у тебя проходят собеседование
- или тут главная цель вообще понять что делать? ![]()
Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли
Не отменяли, а ты думаешь он сработает?
Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O
Вот интересно как у тебя проходят собеседование
- или тут главная цель вообще понять что делать? :D
Могу тебе дать пример кода.
Согласен, что в данном случае с постановкой задачи есть проблемы.
Для задач я выдаю пример кода.
Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.
Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере).
Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно
if (!test.isRunningTest()) {
res = http.send(req);
} else {
res = new HttpResponse();
res.setHeader('Content-Type', 'application/json');
res.setBody('{"hash":"2217de39a332b843cb2ad93365eecad4","success":true}');
res.setStatusCode(200);
}
А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?
А если запросов несколько и типы у них разные?
Плюс такого подхода - перед глазами форма ответа. Если делать много интеграций, то мозг имеет свойство забывать нюансы задачи - а так глянул на секцию и видишь что должно прийти и что реально приходит
- но это нюансы
Тут задача "на подумать" или "на попробовать", если не получается подумать))
Это немного усложняет код, но принцип тот же остается - ручки. А так если вариантов запросов несколько или надо протестировать несколько типов ответов, то я просто добавляю паблик переменную для хранения ответа (и использования в секции else) которую инициализирую в тестах - подсовываю разные responses и запускаю метод.
Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.
В данном случае предполагается использование @future
Это устаревшая технология :)
[quote="Gres"][quote="wilder"]Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.[/quote] В данном случае предполагается использование @future[/quote] Это устаревшая технология :)
В данном случае предполагается использование @future
Это устаревшая технология :)
А можно поподробнее?
[quote="Gres"]В данном случае предполагается использование @future[/quote] [quote="wilder"]Это устаревшая технология :)[/quote] А можно поподробнее?
Это устаревшая технология :)
Не спорю, вопрос то не про технологию)
[quote="wilder"]Это устаревшая технология :)[/quote] Не спорю, вопрос то не про технологию)