1
我有一個觸發器,當機會更新時觸發,作爲我需要調用我們的API的機會的一些細節的一部分。如何爲單元測試使用標註的@future方法?
根據網絡上的許多建議,我創建了一個包含@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()& 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方法來做標註?
是不是所有的Web服務標註@未來,使交易沒有等待標註?很高興你問,雖然因爲同樣的問題,我有一個模擬標註顯然沒有解僱,繼續得到測試錯誤:'定義爲TestMethod的方法不支持Web服務標註,測試跳過' – Xtremefaith 2014-12-23 18:56:26