2014-09-05 44 views
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方法來做標註?

+0

是不是所有的Web服務標註@未來,使交易沒有等待標註?很高興你問,雖然因爲同樣的問題,我有一個模擬標註顯然沒有解僱,繼續得到測試錯誤:'定義爲TestMethod的方法不支持Web服務標註,測試跳過' – Xtremefaith 2014-12-23 18:56:26

回答

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的具體問題。