Testing 如何为Salesforce进行多模拟Http调用测试?

Testing 如何为Salesforce进行多模拟Http调用测试?,testing,post,get,httprequest,apex,Testing,Post,Get,Httprequest,Apex,如果我有一个名为authorize()的Apex函数,它只获取用户名、密码和会话令牌,还有另一个名为getURL('id#','key'),它将记录的id作为字符串,将图像的键作为字符串返回作为参数。getURL调用其内部的authorize函数以获取其调用的凭据。授权是一个post请求,而getURL是一个get请求 我试图弄清楚如何测试这两个调用,以便确保getURL返回正确的JSON作为响应。它甚至不必是URL,这是它最终的意图。但我只需要测试它,以确保这些调用工作正常,并且我得到了它所需

如果我有一个名为
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);
        }
    }
公共类MultiRequestMock实现httpcallomock{
地图请求;
公共MultiRequestMock(映射请求){
this.requests=请求;
}
公共HTTPResponse响应(HTTPRequest请求){
HttpCalloutMock=requests.get(req.getEndpoint());
if(mock!=null){
返回模拟响应(req);
}否则{
抛出新的MyCustomException(“测试方法不支持HTTP调用”);
}
}
public void addRequestMock(字符串url,HttpCalloutMock){
请求.put(url,mock);
}
}

然后我开始编写callout test.cls文件,但不确定如何使用这个模拟类来测试我的原始函数。关于这方面的任何澄清或帮助都会很有帮助,谢谢。

我相信您使用的
calloutTest
Test.setMock(HttpCalloutMock.class,新的MultiRequestMock(maporequests))
然后调用
getUrl
和/或
authorize
方法,而不是真正执行请求的请求,返回的响应将是在
response(HttpRequest)
方法中指定的,该方法已在
MultiRequestMock
类中实现。这基本上就是我认为它的工作原理,更多信息和一个例子,你可以看到。这将使您获得所需的代码覆盖率,但遗憾的是,无法检查您是否获得了正确的JSON响应。为此,您可以使用dev控制台并执行匿名

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

这起作用了,非常感谢。我为JSON响应使用了一个名为postman的第三方应用程序,它通过了代码覆盖率测试