4

我正在 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在测试类中设置?

4

1 回答 1

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

您可能遇到的另一个问题是,在 Salesforce v24 及更高版本的单元测试中,默认情况下无法访问您的数据。这是因为单元测试在一种沙盒中运行,其中没有您的数据,但包含您的元数据(RecordTypes 等)。因此,有两种技术可以为您的测试获取数据:

  1. 在您的方法上使用@isTest(SeeAllData=true)注释。这将使测试方法可以访问您的数据。
  2. 让您的测试方法构建/插入测试数据,然后针对该数据运行测试。当测试结束时,您的测试数据会奇迹般地从您的数据库中消失。

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

于 2012-04-06T23:32:04.930 回答