1

我创建了一个基本的前端,它通过公共访客用户和网络服务调用深入到我的 force.com 数据中。本质上,代码请求用户可以选择的各种项目的费率(也称为成本)(第 10 行)。一切都按预期在沙盒上运行。但是,由于 Web 服务调用,我一直在编写一个测试类,令人惊讶的是,我以前从未与 force.com 一起使用过。

我的具体问题是如何在测试类中填充通常作为 URL 字符串的一部分出现的详细信息(第 7 行和第 8 行)?除了那个特定的问题之外,我认为这是相当常规的问题,我知道如何为此构建测试类。任何输入将不胜感激。

我正在尝试为以下代码创建一个 APEX 测试类:

@RestResource(urlMapping='/rowsrate')
global class ROWSRate {
    @HttpGet
    global static void doGet(){ // grabs the Rate (cost) information for the provided Resource Type, ie Police Officer and returns a JSON object
        String callback = RestContext.request.params.get('callback');

        Date endDateParam = Date.parse(RestContext.request.params.get('enddate')); // transmute string parameter to date on the fly
        String resourceName = RestContext.request.params.get('resctype');

        List<ROWS_RateRange__c> resourceTypeList = [select Cost__c, Rate__r.Name from ROWS_RateRange__c where LookupName__c = :resourceName and Start_Date__c <= :endDateParam and End_Date__c >= :endDateParam];

        RestResponse res = RestContext.response;
        res.addHeader('Content-Type', 'application/javascript');
        res.responseBody = Blob.valueOf(callback + '(' + JSON.serialize(resourceTypeList) + ')');
    }
}

PS我已经在这个话题上进行了相当多的谷歌搜索,但发现的大多是古代物品。也许我的谷歌技能今天已经关闭了。

4

2 回答 2

0

您需要查看HttpCalloutMock接口。

于 2015-09-05T03:19:36.473 回答
0

这是我最终构建的用于测试上述内容的课程。完全覆盖。

@isTest
private class ROWSRateTest {      
    static testMethod void testGoodRate(){
    RestRequest req = new RestRequest(); 
    RestResponse res = new RestResponse();

    req.requestURI = '/services/apexrest/rowsrate';  

    //creating test Rate & RateRange
    ROWS_Rate__c testRate = ROWSDataFactoryTest.createROWSRatewithRange();
    ROWS_RateRange__c testRateRange = [Select id, Cost__c from ROWS_RateRange__c where Rate__c =: testRate.Id];

    req.addParameter('callback', 'test');
    // fake the passed parameters
    req.addParameter('enddate', '06/30/2015');
    req.addParameter('resctype', 'isTest Rate');
    req.httpMethod = 'GET';
    RestContext.request = req;
    RestContext.response = res;

    Test.startTest();
    ROWSRate.doGet();
    Test.stopTest();
    String testBlob = res.responseBody.toString();

    System.assert(testBlob.contains(testRate.Name));
    system.assert(testBlob.contains(testRateRange.Cost__c.format()));
}
// I'm not sure what else we could test since it's a pretty basic class
}
于 2015-12-16T19:14:25.670 回答