2012-04-05 103 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