【问题标题】:How to make a MultiMock Http Callout Test for Salesforce?如何为 Salesforce 进行 MultiMock Http 标注测试?
【发布时间】:2019-10-07 13:40:42
【问题描述】:

如果我有一个名为 authorize() 的 Apex 函数,它只获取用户名、密码和会话令牌,以及另一个名为 getURL('id#', 'key') 的函数,它将记录的 id# 作为字符串和密钥用于图像作为参数作为字符串返回。 getURL 调用其中的授权函数以获取其标注的凭据。 authorize 是一个 post 请求,getURL 是一个 get 请求。

我试图弄清楚如何测试这两个标注,以便确保 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 文件,但不知道如何使用这个模拟类来测试我的原始函数。对此的任何澄清或帮助都会有所帮助。谢谢。

【问题讨论】:

    标签: testing post get httprequest apex


    【解决方案1】:

    我相信你的calloutTest 类你使用Test.setMock(HttpCalloutMock.class, new MultiRequestMock(mapOfRequests)); 然后调用getUrl 和/或authorize 方法,而不是真正执行返回响应的请求将是response(HttpRequest) 中指定的响应您在MultiRequestMock 类中实现的方法。这基本上就是我认为它工作的方式,有关更多信息和示例,您可以查看this resource on testing callout classes。这将为您提供所需的代码覆盖率,但遗憾的是无法检查您是否获得了正确的 JSON 响应。为此,您也许可以使用开发控制台并执行匿名?

    您可能希望简化您的 HttpCalloutMock 实现并考虑从构造函数中删除映射,因为此类实际上只需要返回一个简单的响应,然后您的 calloutTest 类可以是您确保返回响应的地方是正确的。 希望这会有所帮助

    【讨论】:

    • 这很有效,非常感谢。我为 JSON 响应使用了一个名为 postman 的第三方应用程序,它通过了代码覆盖率测试。
    • 真棒@chaseter15 乐于提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2011-12-17
    • 2010-11-01
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多