课程章节介绍
同学们,我们来看这一页内容。它在讲测试的时候,怎么模拟外部接口的调用,也就是 HttpCalloutMock 接口。
简单说,以后你在测试里,不能再真去连外网发请求了。那样不仅慢、不稳定,可能还会花真钱,或者不小心修改了外部数据。所以 Salesforce 提供了一个“假接口”的机制。我们只要写一个类,实现一个叫 HttpCalloutMock 的接口,在类里面写好假的响应内容,测试的时候 Apex 就会自动调用这个假响应,根本不会往外真的发请求。
具体怎么做呢?
第一步,创建一个类,这个类需要实现 HttpCalloutMock 接口,里面要重写一个 respond 方法。在这个方法里,你返回一个 HttpResponse 对象,把状态码、响应体、头信息都设好——这就是你希望外部系统“假装”返回给你的内容。
这个类可以是 public 或者 global 的,都可以。但最好加上 @isTest 注解。这样 Salesforce 就知道,这个类只用在测试里,不会被算进正式代码的 6MB 大小限制里,能帮你省下宝贵的代码空间。
写好这个假响应类之后,在测试方法里,你要在真正执行被测代码之前,先调用 Test.setMock 方法,告诉 Salesforce:“哎,等一下如果有 HTTP 请求,就用我这个假类来响应。” 其中第一个参数是 HttpCalloutMock.class,第二个参数是你刚刚写的那个假响应类的实例。
做完这一步之后,神奇的事情就发生了——接着在你的测试方法里,只要业务代码里一执行 HTTP 调用,Apex 运行时就会拦截下来,不再去连真正的网络,而是直接把你预先写好的那个 HttpResponse 还给你。你的代码就像真的接到了外部系统回复一样,但实际上完全没有网络开销,稳定又快。
所以记住三个要点:
第一,写个类实现 HttpCalloutMock 接口,在 respond 方法里返回设定好的 HttpResponse。
第二,给这个类加上 @isTest,不占正式代码空间。
第三,在测试方法里用 Test.setMock 把这个假类绑上。这样所有 HTTP 调用就都被你“骗”过去啦。
这在日常开发里特别常用,尤其是在做集成测试的时候。你可以用这个方法模拟各种成功、失败、超时等不同的场景,让测试覆盖更全面。好,这一页就讲到这里。
关键词
Apex
Salesforce
Developer Guide