如何排查Apex测试类报getProperties方法不存在或签名错误问题
Salesforce Aura方法签名不匹配报错定位
业务方法源码(获取双列表框/下拉选项列表)
@AuraEnabled public static List <String> getProperties(sObject objObject, string sFieldAPI) { List < String > lstOptions = new list < String > (); Schema.sObjectType objType = objObject.getSObjectType(); Schema.DescribeSObjectResult objDescribe = objType.getDescribe(); map <String, Schema.SObjectField> fieldMap = objDescribe.fields.getMap(); list < Schema.PicklistEntry > values =fieldMap.get(sFieldAPI).getDescribe().getPickListValues(); for (Schema.PicklistEntry a: values) { lstOptions.add(a.getValue()); } lstOptions.sort(); return lstOptions; }
触发报错的测试类代码
testMethod static void testGetProperties(){ setupInsertData(); Test.startTest(); List<String> Prop = MessageTypeController.getProperties('isArray'); System.debug('Test Category'+Prop); if(Prop!=null){ System.assertEquals(Prop!=null,true); }else{ System.assertEquals(Prop==null,true); } Test.stopTest(); }
运行时抛出的错误信息
"Method does not exist or incorrect signature: void getProperties(String)"
错误根因
报错直接由方法调用时入参数量、类型和定义不匹配导致:
- 定义的
getProperties方法要求传入2个入参:第一个是sObject类型的对象实例,第二个是String类型的目标字段API名 - 测试类中调用方法时仅传入了1个
String类型参数,Apex编译器找不到仅接收单个String参数的同名方法,因此抛出签名不匹配错误
修复方案
- 修正测试类中的方法调用逻辑,按方法定义要求传入两个参数:第一个参数为目标sObject的实例,第二个参数为要获取选项的picklist字段API名(注意自定义字段API名必须带
__c后缀)。示例调用代码:// 替换成业务中实际的sObject名、字段API名即可 List<String> Prop = MessageTypeController.getProperties(new MessageType__c(), 'isArray__c'); - 优化原方法的健壮性:补充入参空值、字段存在性、字段类型校验,避免传入非法参数时触发空指针异常。
- 简化测试类断言逻辑,删除冗余的if-else判断,直接使用断言方法校验返回结果即可,示例:
System.assertNotEquals(null, Prop, '返回的选项列表不应为空');
内容的提问来源于stack exchange,提问作者Hardik Borad
相关产品推荐
相关产品推荐

