Ребята, вдруг вам стало скучно, а у меня для вас есть задачка:
Пусть есть триггер на опп-ти, который отправляется запрос в гугл, также есть воркфлоу, который на любое дествие обновляет имя опп-ти на имя аккаунта.
Задача очень проста: написать тест, что запрос прошел и тело запроса соответствует желаемому.
Примечание: воркфлоу модифицировать и удалять нельзя.
P.s. я часто общаюсь/собеседую СФ программистов, вот и приходится придумывать простенькие задачки. =)
Ребята, вдруг вам стало скучно, а у меня для вас есть задачка: Пусть есть триггер на опп-ти, который отправляется запрос в гугл, также есть воркфлоу, который на любое дествие обновляет имя опп-ти на имя аккаунта. Задача очень проста: написать тест, что запрос прошел и тело запроса соответствует желаемому. Примечание: воркфлоу модифицировать и удалять нельзя. P.s. я часто общаюсь/собеседую СФ программистов, вот и приходится придумывать простенькие задачки. =)
Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию.
Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O
Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать?
Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию. Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O Вот интересно как у тебя проходят собеседование :D - или тут главная цель вообще понять что делать? :D
Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли
Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли
Не отменяли, а ты думаешь он сработает?
[quote="wilder"]Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли[/quote] Не отменяли, а ты думаешь он сработает?
Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O
Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать? :D
Могу тебе дать пример кода.
Согласен, что в данном случае с постановкой задачи есть проблемы.
[quote="Dmitry Shnyrev"]Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию. Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O Вот интересно как у тебя проходят собеседование :D - или тут главная цель вообще понять что делать? :D[/quote] Могу тебе дать пример кода. Согласен, что в данном случае с постановкой задачи есть проблемы.
Для задач я выдаю пример кода.
[quote="Dmitry Shnyrev"]Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать? [/quote] Для задач я выдаю пример кода.
Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.
[quote="Dmitry Shnyrev"]тут главная цель вообще понять что делать?[/quote] Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.
Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты 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);
}
[quote="wilder"]Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли[/quote] Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере). Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно :) [code] 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); } [/code]
А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?
[quote="Gres"]Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.[/quote] А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?
А если запросов несколько и типы у них разные?
[quote="Dmitry Shnyrev"]Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере). [/quote] А если запросов несколько и типы у них разные?
Плюс такого подхода - перед глазами форма ответа. Если делать много интеграций, то мозг имеет свойство забывать нюансы задачи - а так глянул на секцию и видишь что должно прийти и что реально приходит - но это нюансы
[quote="Dmitry Shnyrev"]Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно [/quote] Плюс такого подхода - перед глазами форма ответа. Если делать много интеграций, то мозг имеет свойство забывать нюансы задачи - а так глянул на секцию и видишь что должно прийти и что реально приходит :D - но это нюансы
Тут задача "на подумать" или "на попробовать", если не получается подумать))
[quote="Dmitry Shnyrev"]А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?[/quote] Тут задача "на подумать" или "на попробовать", если не получается подумать))
Это немного усложняет код, но принцип тот же остается - ручки. А так если вариантов запросов несколько или надо протестировать несколько типов ответов, то я просто добавляю паблик переменную для хранения ответа (и использования в секции else) которую инициализирую в тестах - подсовываю разные responses и запускаю метод.
[quote="Gres"]А если запросов несколько и типы у них разные?[/quote] Это немного усложняет код, но принцип тот же остается - ручки. А так если вариантов запросов несколько или надо протестировать несколько типов ответов, то я просто добавляю паблик переменную для хранения ответа (и использования в секции else) которую инициализирую в тестах - подсовываю разные responses и запускаю метод.
Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.
[quote="Gres"][quote="wilder"]Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли[/quote] Не отменяли, а ты думаешь он сработает?[/quote] Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.
Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.
В данном случае предполагается использование @future
[quote="wilder"]Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.[/quote] В данном случае предполагается использование @future
Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.
В данном случае предполагается использование @future
Это устаревшая технология :)
[quote="Gres"][quote="wilder"]Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.[/quote] В данном случае предполагается использование @future[/quote] Это устаревшая технология :)
В данном случае предполагается использование @future
Это устаревшая технология :)
А можно поподробнее?
[quote="Gres"]В данном случае предполагается использование @future[/quote] [quote="wilder"]Это устаревшая технология :)[/quote] А можно поподробнее?
Это устаревшая технология :)
Не спорю, вопрос то не про технологию)
[quote="wilder"]Это устаревшая технология :)[/quote] Не спорю, вопрос то не про технологию)