You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 20:33:17