2015-08-25 1 views
1

Я создал базовый интерфейс, который попадает в мои данные force.com через пользователя общего гостя и вызов веб-службы. По сути, код запрашивает Rate (aka cost) различных предметов, которые пользователь может выбрать (строка 10). Все работает над песочницей, как и ожидалось. Тем не менее, я застрял в написании тестового класса из-за вызовов веб-сервисов, которые, как я удивительно, никогда не работали совместно с Force.com.Salesforce: тестовый класс APEX для веб-службы

Мое специфическое зависание состоит в том, как заполнить детали в классе тестирования, который обычно входит в состав строки 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 Я сделал свою справедливую долю погуглить на эту тему, но встречается в основном древние предметы. Возможно, мои навыки Google ушли сегодня.

ответ

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 
}