2012-04-05 105 views
4

我正在salesforce.com平臺上開發Rest Web服務。我寫了它,它正在正常工作,並在我打電話時給出準確的響應。問題是如何來測試它在salesforce.com測試Rest Web服務

@RestResource(urlMapping='/feedpost/*') 

    global class Feedpost9 
    { 
     @HttpPut 
     global static User updateCase() { 
     RestRequest req=RestContext.request; 
     User user=[SELECT id from User where email=:req.headers.get('email') LIMIT 1]; 
     return user;   
    } 

} 

現在我的任務就是測試這個REST Web服務方法updateCase。爲了測試POST請求方法,我必須在方法調用中設置參數,但是在PUT方法的情況下 - 如何在測試類中設置RestContext.request

+1

Salesforce的堆棧交換是這樣 – 2016-12-26 20:53:32

回答

5

有兩個問題,你必須在你的單元測試抗衡:

  • 需要一個有效的RestRequest
  • 在測試環境中

這裏缺乏數據是基本技術設置您的方法需要的請求對象

global class Feedpost9 { 

    // your methods here... 

    static testMethod void testRest() { 
     // set up the request object 
     System.RestContext.request = new RestRequest(); 
     RestContext.request.requestURI = '/feedpost/whatever'; 
     RestContext.request.addHeader('email', '[email protected]'); 
     // Invoke the method directly 
     Feedpost9.updateCase(); 
    } 
} 

其他p您可能會遇到的問題是,在Salesforce v24及更高版本的單元測試中,默認情況下,無法訪問您的數據。這是因爲單元測試運行在一種沒有數據的沙箱中,但包含您的元數據(RecordTypes等)。因此,有兩種技術可以將數據提供給您的測試:

  1. 在您的方法上使用@isTest(SeeAllData=true)註釋。這將使測試方法訪問您的數據。
  2. 讓您的測試方法構建/插入測試數據,然後針對該數據運行測試。測試結束後,您的測試數據將從數據庫中奇蹟般消失。

我更喜歡用後一種方法,但有時我騙...

+2

問題,一個偉大的地方,如果你打算分發此代碼(例如,作爲管理包),我強烈建議創建自己的測試數據。您無法確定擁有您代碼的組織是否已經擁有您需要的測試數據。 – 2012-09-28 14:10:08

+1

使用現有的數據進行測試是一個懶惰的修復,將來一定會咬你。如果您沒有時間正確創建測試數據,請修復您的開發流程。 我知道使用SeeAllData的唯一好理由是用於數據驗證測試。 – Acuariano 2015-01-04 15:35:31