我有一个触发器在机会更新时触发,作为其中的一部分,我需要通过机会中的一些细节调用我们的API。
根据网络上的许多建议,我创建了一个包含@future方法的类来制作标注。
我试图捕捉@future方法中引发的异常,但测试方法没有看到它。
受测试的课程如下:
public with sharing class WDAPIInterface {
public WDAPIInterface() {
}
@future(callout=true) public static void send(String endpoint, String method, String body) {
HttpRequest req = new HttpRequest();
req.setEndpoint(endpoint);
req.setMethod(method);
req.setBody(body);
Http http = new Http();
HttpResponse response = http.send(req);
if(response.getStatusCode() != 201) {
System.debug('Unexpected response from web service, expecte response status status 201 but got ' + response.getStatusCode());
throw new WDAPIException('Unexpected response from web service, expecte response status status 201 but got ' + response.getStatusCode());
}
}
}
这是单元测试:
@isTest static void test_exception_is_thrown_on_unexpected_response() {
try {
WDHttpCalloutMock mockResponse = new WDHttpCalloutMock(500, 'Complete', '', null);
WDAPIInterface.send('https://example.com', 'POST', '{}');
} catch (WDAPIException ex) {
return;
}
System.assert(false, 'Expected WDAPIException to be thrown, but it wasnt');
}
现在,我已经读过测试@future方法的方法是使用Test.startTest()& amp;来围绕调用。 Test.endTest(),但是当我这样做时,我得到另一个错误:
METHOD RESULT
test_exception_is_thrown_on_unexpected_response : Skip
MESSAGE
Methods defined as TestMethod do not support Web service callouts, test skipped
所以问题是,我如何对发出标注的@future方法进行单元测试?
答案 0 :(得分:1)
由于没有使用HttpCalloutMock,因此跳过了标注。
我假设WDHttpCalloutMock实现了HttpCalloutMock?
如果是这样,对Test.setMock的调用应该让它将模拟的响应返回给标注。
WDHttpCalloutMock mockResponse = new WDHttpCalloutMock(500, 'Complete', '', null);
Test.setMock(HttpCalloutMock.class, mockResponse);
WDAPIInterface.send('https://example.com', 'POST', '{}');
顺便说一下,Salesforce StackExchange site是向Salesforce提出具体问题的好地方。