salesforce - 在 salesforce.com 中测试 Rest Web 服务

标签 salesforce

我正在 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在测试课上?

最佳答案

在单元测试中必须解决两个问题:

  • 需要有效的 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', 'blahblah@some.org');
            // Invoke the method directly
            Feedpost9.updateCase();
        }
    }
    

    您可能遇到的另一个问题是,在 Salesforce v24 及更高版本中,默认情况下,单元测试无权访问您的数据。那是因为单元测试在一种沙箱中运行,它没有您的数据,但包含您的元数据(RecordTypes 等)。因此,有两种技术可以将数据用于测试:
  • 使用 @isTest(SeeAllData=true)您的方法上的注释。这将使测试方法可以访问您的数据。
  • 让您的测试方法构建/插入测试数据,然后针对该数据运行您的测试。当测试结束时,您的测试数据将奇迹般地从您的数据库中消失。

  • 我更喜欢使用后一种方法,但有时我会作弊...

    关于salesforce - 在 salesforce.com 中测试 Rest Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031179/

    相关文章:

    salesforce - Apex为什么标准 Controller 在创建 Controller 时不设置当前页面(单元测试)

    salesforce - 未找到元素 : userDetails 的顶点类型

    javascript - 寻找黑客在原型(prototype)被密封时填充对象

    salesforce - 如何在与 Salesforce Platform EventBus 通信的 cometd 客户端中刷新 token ?

    hadoop - SalesForce 与 Hadoop 哪个更好?

    oauth - 使用 OAuth 2.0 token 登录 Salesforce.com

    python - 使用 django 和 REST-api 获取 salesforce.com access_token

    html - 查询字符串中的查询字符串

    ios - 通过 iOS 应用程序将图像上传到 Salesforce

    javascript - Salesforce:URL 重写器和 JScript 远程处理:解析 json 响应时出现异常: 'Unexpected token <' 。登录?