Ответ обновлен, пожалуйста, прокрутите вниз
public class SidTest {
// 1. How to create a new Lead programatically on Force.com (in Apex)
/* This method is marked as test method, meaning that you can use it to run tests but in the end no data will be saved
(transaction rollback). You'll need similar code in a class that intercepts messages from Twilio.
*/
public static testMethod void insertLead(){
Lead l = new Lead(FirstName='Test', LastName='Lead', Email='example@example.com', Company='test', NumberofEmployees=7);
insert l;
// 2. How do I test the TwilioForce components, especially those I've changed to reflect my client's Twilio phone number and token?
/* Not sure what do you mean, but most likely by writing test classes like this one and checking their test code coverage.
See also http://stackoverflow.com/questions/4372202/how-to-unit-test-works-in-salesforce/4381941
Below sample test that checks if our insert above succeeded.
You can run it from Eclipse (preferred) or Salesforce GUI in Setup->Develop->Apex classes.
*/
Lead[] leads = [SELECT Name, Email FROM Lead WHERE Name = 'Test Lead'];
System.debug(leads); // if you want to see results in detailed debug log
System.assertEquals(1, leads.size());
System.assertEquals('example@example.com', leads[0].Email);
}
}
Вот результат, когда вы запустите его в Eclipse: http://dl.dropbox.com/u/709568/stackoverflow/Sid.png
Что касается последнего вопроса: когда вы будете довольны функциональностью, протестированной в вашей Developer Edition, вы должны попросить клиента предоставить вам доступ к «Песочнице» его организации. Вы можете создать в Eclipse новый проект, указывающий на эту изолированную программную среду, и просто создать в нем все классы, выполнить тесты с подмножеством реальных данных и т. Д. Наконец, вы или кто-либо со стороны клиента выполните развертывание в «рабочей» среде, где такие вещи, как код охват в автоматизированных тестах начнет иметь значение.
В качестве альтернативы вы можете создать пакет с вашим кодом и продавать его в AppExchange, как плагин для Salesforce, который любой может загрузить в свою организацию. Вы можете взимать плату за это, конечно. Но сейчас это выглядит как слишком большой прыжок ...
Надеюсь, это поможет вам начать.
Обновление:
Вот быстрый и грязный класс, основанный на TestCallsXmlParser, который включен в пакет кода, который вы используете:
public class TestCallsXmlParser{
@isTest
public static void TestCallsXmlParserMethod1(){
CallsXmlParser callxml = new CallsXmlParser();
String xmlData = '<TwilioResponse> <Calls page=\"0\" numpages=\"1\" pagesize=\"50\" total=\"38\" start=\"0\" end=\"37\"> <Call> <Sid>CA42ed11f93dc08b952027ffbc406d0868</Sid> <DateCreated>Sat, 07 Feb 2009 13:15:19 -0800</DateCreated><DateUpdated>Sat, 07 Feb 2009 13:15:19 -0800</DateUpdated><CallSegmentSid/>';
xmlData = xmlData + '<AccountSid>AC309475e5fede1b49e100272a8640f438</AccountSid><Called>4159633717</Called><Caller>4156767925</Caller><PhoneNumberSid>PN01234567890123456789012345678900</PhoneNumberSid><Status>2</Status><StartTime>Thu, 03 Apr 2008 04:36:33 -0400</StartTime><EndTime>Thu, 03 Apr 2008 04:36:47 -0400</EndTime>';
xmlData = xmlData + '<Duration>14</Duration><Price/><Flags>1</Flags></Call>';
xmlData = xmlData + '<Call><Sid>CA751e8fa0a0105cf26a0d7a9775fb4bfb</Sid><DateCreated>Sat, 07 Feb 2009 13:15:19 -0800</DateCreated><DateUpdated>Sat, 07 Feb 2009 13:15:19 -0800</DateUpdated><CallSegmentSid/>';
xmlData = xmlData + '<AccountSid>AC309475e5fede1b49e100272a8640f438</AccountSid><Called>2064287985</Called><Caller>4156767925</Caller><PhoneNumberSid>PNd59c2ba27ef48264773edb90476d1674</PhoneNumberSid><Status>2</Status>';
xmlData = xmlData + '<StartTime>Thu, 03 Apr 2008 01:37:05 -0400</StartTime><EndTime>Thu, 03 Apr 2008 01:37:40 -0400</EndTime><Duration>35</Duration><Price/> <Flags>1</Flags> </Call></Calls></TwilioResponse> ';
CallsXmlParser callxml1 = new CallsXmlParser(xmlData);
// eyescream's modification starts here
// list to store our leads and bulk save them in blocks up to 100 records at 1 insert
List<Lead> leads = new List<Lead>();
for(CallsXmlParser.Call c : callxml1.listRecords) {
System.debug('2 new Leads will be created from phone numbers: ' + c.Caller + ', ' + c.Called);
leads.add(new Lead(MobilePhone = c.Caller, Company='x', LastName='x')); // Company & Last Name are mandatory fields
leads.add(new Lead(MobilePhone = c.Called, Company='y', LastName='y')); // without them insert will fail.
if(leads.size() == 100) { // 100 is the limit of records saved at once. Inserting in batches speeds up execution.
insert leads;
leads.clear();
}
}
// If we have any leftovers, we'll insert them too.
if(leads.size() > 0) {
insert leads;
leads.clear();
}
}
}
Конечно, вы можете улучшить его, проверить наличие дубликатов, заполнить реальными именами и т. Д. ... но это примерно то, как вы можете использовать проанализированные результаты. Я не думаю, что анализ XML сам по себе был бы хорошим вариантом ... Ваш вопрос предполагает, что в XML будет добавлено больше полей (или существующие будут использоваться для хранения различных данных), но, вероятно, вы сможете расширить парсер соответственно.