Salesforce中使用Apex Test Class(测试类)测试Extension类型实例
2017-09-19 16:08
459 查看
场景说明:最近在写Extension类型测试类时,对于通过Url中的参数去访问某个特定记录页面的测试类,由于缺乏经验无法达到比较理想的覆盖率(>75%),在参考了相关资料后,特意对Extension类的测试类,做以下总结。
1、Apex Extension Class Sample:
对于依赖parameter的custom page,在写测试类时,需要预先设置参数:
对于Extension类实例化时,注意传参,参数为标准控制器的实例化对象;
4、其他经验之谈:
通过代码创建Task时,需要注意必填项及其含义,其中被分配人为ownerId, 相关项目为whatId。另外,如果需要设置提醒的话,IsReminderSet和ReminderDateTime都填写后才会生效。
1、Apex Extension Class Sample:
/********************************************************************** *Name:供应商个人中心扩展 *Description:供应商可以在广告商中心查看自己的个人信息,并提交修改信息申请 ====================================================== History ------- VERSION AUTHOR DATE DETAIL 1.0 Wilson Xu 2017-09-15 Created ***********************************************************************/ public class DealerCenterExtension { public List<Contact> conList {get;set;} public Contact cont {get;set;} public String accountId; public String description {get;set;} public String userId; public DealerCenterExtension(ApexPages.StandardController controller) { userId = System.Label.UserId; accountId = ApexPages.currentPage().getParameters().get('id'); // 查找该供应商的第一个联系人 conList = [SELECT LastName, Phone FROM Contact WHERE AccountId = :accountId]; if(conList.size() > 0) { cont = conList[0]; } } // 提交修改申请 public void modifyApplication() { if(description.length() > 0) { Account acc = [SELECT Name FROM Account WHERE Id = :accountId]; try{ // 新建一个任务 Task task = new Task(); task.Subject = acc.Name + '信息修改申请'; task.whatId = accountId;// 相关项目,这里是供应商Id task.ownerId = userId;// 被分配人,这里是UserId task.Description = description; task.status = 'open'; task.priority = 'High'; task.IsReminderSet = true;// 设置提醒 task.ReminderDateTime = System.now(); insert task; ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.CONFIRM,'供应商信息修改申请提交成功!')); }catch(DmlException e) { System.debug('Task Create Error: ' + e.getMessage()); ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.WARNING,'供应商信息修改申请提交失败,请联系系统管理员!')); } }else { ApexPages.addMessage(new ApexPages.Message(ApexPages 4000 .severity.WARNING,'请在修改备注里面按照实例填写修改详情!')); } } }2、Test Class Sample:
@isTest private class DealerCenterExtensionTest { static testMethod void test() { // 供应商 Account a1 = new Account(); a1.Name = '测试广告商'; a1.Approval_Status__c = '审核通过'; a1.Advertiser_Email__c = 'test@salesforce.com'; a1.SAP_Ads_Number__c = '111111'; insert a1; // 联系人 Contact c1 = new Contact(); c1.LastName = 'test'; c1.Phone = '18812312211'; c1.AccountId = a1.Id; insert c1; // 为页面传入参数,因此构造方法中可以通过Id查询记录 PageReference prf = Page.DealerCenter; prf.getParameters().put('id',a1.Id); Test.setCurrentPage(prf); //实例化该Extension类 DealerCenterExtension ac = new DealerCenterExtension(new ApexPages.StandardController(a1)); ac.description = ''; ac.modifyApplication(); ac.description = 'test'; ac.modifyApplication(); } }3、详细解释:
对于依赖parameter的custom page,在写测试类时,需要预先设置参数:
ApexPages.currentPage().getParameters().put('id', accountId);
对于Extension类实例化时,注意传参,参数为标准控制器的实例化对象;
4、其他经验之谈:
通过代码创建Task时,需要注意必填项及其含义,其中被分配人为ownerId, 相关项目为whatId。另外,如果需要设置提醒的话,IsReminderSet和ReminderDateTime都填写后才会生效。
相关文章推荐
- 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法
- Salesforce中为服务器分页Pagination编写测试类-Test Class For ApexPages.StandardSetController, hasNext, next etc.
- 使用eclipse JDT compile class,解决 无法确定 X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例
- 使用eclipse JDT compile class,解决 没法确定 X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例
- 使用eclipse JDT compile class,解决 无法确定 X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例
- 使用eclipse JDT compile class,解决 无法确定 X 的类型参数;对于上限为 X,java.lang.Object 的类型变量 X,不存在唯一最大实例
- biztalk中使用.net class类型的消息(二) -- 只使用.net class消息的示例
- biztalk中使用.net class类型的消息(三) -- net class类型消息转换为xml消息的示例
- biztalk中使用.net class类型的消息(一) -- 相关知识介绍【转】
- 附录A 使用ASP.NET AJAX JavaScript Class Browser查看客户端类型
- biztalk中使用.net class类型的消息(一) -- 相关知识介绍
- 个人学习代码保存:例9.在存储过程中使用cast 类型转换的实例
- [转载]使用日期/时间型数据类型的一些基本问题(ACCESS中测试)
- 使用Windows Mobile Test Framework进行Windows Mobile程序的自动化测试
- MSDN Webcast - 使用Windows Mobile Test Framework进行自动化测试(Level 300)
- 急!delphi中variant能否和object类型转换。实例:在使用getpropvalue(range,'属性')时提示类型有错,如何解决?!!
- Response.AddHeader使用实例收集 如何做下载,下载中文显示乱码怎么办 ContentType类型大全
- 在PB中如何使用软件测试工具rational teamtest
- 使用 TestDriven.NET 实施『测试驱动开发』
- MSDN Webcast 预告:使用Windows Mobile Test Framework进行自动化测试