保存Apex测试类遇方法不存在/签名错误,求技术协助
问题解决:Apex测试类保存报错——方法不存在或签名错误
错误信息
Method does not exist or incorrect signature: void exceptionLogFromFlow(List<CS_ExceptionLoggerFlowTest.WrapperClass>) from the type CS_ExceptionLoggerFlow
错误原因
主类CS_ExceptionLoggerFlow中被@InvocableMethod标注的exceptionLogFromFlow方法,接收的参数类型是List<CS_ExceptionLoggerFlow.Params>,但测试类里传入的是自定义的List<CS_ExceptionLoggerFlowTest.WrapperClass>。两个内部类分属不同的外部类,类型完全不兼容,导致方法签名匹配失败。
解决方案
测试类需直接使用主类定义的Params类构建参数列表,无需自行定义同名内部类。
修改后的测试类代码
@isTest Public class CS_ExceptionLoggerFlowTest { @isTest static void SingleExceptionMethod() { // 实例化主类的Params内部类 CS_ExceptionLoggerFlow.Params param = new CS_ExceptionLoggerFlow.Params(); param.apexClass = 'CS_ExceptionLoggerFlow'; param.methodName = 'createExceptionLog'; param.exceptionMessage = 'message'; param.exceptionDated = System.now(); // 修正类型不匹配:原代码用Date类型赋值给DateTime字段 param.isAPIFailure = false; param.userName = 'userName'; List<CS_ExceptionLoggerFlow.Params> paramList = new List<CS_ExceptionLoggerFlow.Params>(); paramList.add(param); Test.startTest(); CS_ExceptionLoggerFlow.exceptionLogFromFlow(paramList); Test.stopTest(); // 新增断言验证日志是否成功插入 ExceptionLogger__c log = [SELECT Id, Apex_Class__c FROM ExceptionLogger__c LIMIT 1]; System.assertEquals('CS_ExceptionLoggerFlow', log.Apex_Class__c); } }
额外说明
- 原测试类中
Wlu.exceptionDated=System.today();存在类型错误:System.today()返回Date类型,而Params类的exceptionDated是DateTime类型,改用System.now()可解决该问题。 - 添加断言语句能直接验证测试逻辑的正确性,确保日志记录按预期插入到数据库中。
内容的提问来源于stack exchange,提问作者Pihu
相关产品推荐
相关产品推荐

