课程章节介绍
今天我们来聊聊,在Apex里怎么测试那些调用外部Web服务的代码。想象一下,你写了一个Apex类,里面有个方法会去呼叫远方的Web服务拿数据。当你部署或打包这个类的时候,Salesforce要求至少有75%的代码被测试覆盖到,否则不让你上线。
但是测试有个麻烦:测试方法默认是不能真的去调用Web服务的,一跑就会失败。那怎么验证这些代码,又能达到覆盖率呢?这就是我们这节课要学的:WebServiceMock接口和Test.setMock方法。
简单说,WebServiceMock就像个替身演员。你可以写一个模拟类,实现WebServiceMock接口,让它假装是那个外部服务,按照你的要求返回假数据。这个模拟类可以写成public或global,最好再用@isTest注解标记一下,这样它就不计入你组织那6MB的代码大小限制,不占你宝贵的代码空间。
然后在测试方法里,你用Test.setMock方法,告诉系统:“嘿,当接下来的代码要调用这个特定的WebService时,请使用我这个模拟替身。”这样测试就不会真去外部请求,而是拿回你预设的响应,既保证了测试平稳通过,又覆盖了Web服务调用那部分代码。
举个例子,假设你有一个类叫WebServiceCallout,里面用SOAP或HTTP叫外部服务。你就创建一个实现WebServiceMock的替身类,在它的execute方法里写好要返回的假响应。然后在测试中,用Test.setMock(WebServiceMock.class, 替身实例)来绑定。之后你的测试就能顺畅跑完,代码覆盖率轻松达标。
记住这个组合:写模拟替身,用@isTest防占空间,再用Test.setMock注入。这样你的Web服务代码就能安全、可靠地通过测试了。
好,这节课就到这里,下次我们可以动手写一个例子试试看。
关键词
Apex
Salesforce
Developer Guide