Как сделать тест выноски MultiMock Http для Salesforce? - PullRequest
0 голосов
/ 07 октября 2019

Если у меня есть функция Apex с именем authorize(), которая просто получает имя пользователя, пароль и токен сеанса, и другая функция с именем getURL('id#', 'key'), которая принимает идентификатор # для записи в виде строки и ключ дляизображение для возврата в виде строки в качестве параметров. getURL вызывает функцию авторизации внутри нее, чтобы получить учетные данные для своего вызова. Авторизация - это почтовый запрос, а getURL - запрос на получение.

Я пытаюсь выяснить, как проверить обе эти выноски, чтобы убедиться, что getURL возвращает правильный JSON в качестве ответа. Это даже не должен быть URL, который является его намерением в конце концов. Но мне просто нужно проверить это, чтобы убедиться, что эти выноски работают и что я получаю ответ на 75% покрытия кода, в котором оно нуждается.

Я создал класс multiRequestMock, который выглядит следующим образом:

    public class MultiRequestMock implements HttpCalloutMock {
        Map<String, HttpCalloutMock> requests;

        public MultiRequestMock(Map<String, HttpCalloutMock> requests) {
            this.requests = requests;
        }

        public HTTPResponse respond(HTTPRequest req) {
            HttpCalloutMock mock = requests.get(req.getEndpoint());
            if (mock != null) {
                return mock.respond(req);
            } else {
                throw new MyCustomException('HTTP callout not supported for test methods');
            }
        }

        public void addRequestMock(String url, HttpCalloutMock mock) {
            requests.put(url, mock);
        }
    }

Затем я начал писать файл calloutTest.cls, но не был уверен, как использовать этот класс для проверкимои оригинальные функции. Любая ясность или помощь по этому вопросу будет полезна. Спасибо.

1 Ответ

0 голосов
/ 08 октября 2019

Я верю, что в вашем классе calloutTest вы используете Test.setMock(HttpCalloutMock.class, new MultiRequestMock(mapOfRequests));, затем вызываете методы getUrl и / или authorize, и вместо того, чтобы запрос действительно выполнял ответ, будет тот, который указан в response(HttpRequest)метод, который вы реализовали в классе MultiRequestMock. По сути, именно так я и вижу. Для получения дополнительной информации и примера вы можете увидеть этот ресурс по тестированию классов выноски . Это обеспечит вам необходимое покрытие кода, но, к сожалению, не может проверить, что вы получаете правильный ответ JSON. Для этого вы можете использовать консоль разработчика и выполнить анонимно?

Возможно, вы захотите взглянуть на упрощение вашей HttpCalloutMock реализации и подумать об удалении карты из конструктора, поскольку этому классу действительно нужно только вернуть простой ответ, тогда ваш класс calloutTest может быть тем, где вы убедитесь, чтовозвращенный ответ правильный. Надеюсь, это поможет

...