检查Apex类代码覆盖率时代码被高亮异常问题咨询
问题现象
核查Apex类代码覆盖率时,目标Apex类出现代码高亮异常,问题截图如下:
问题关联的测试类代码如下:
@isTest public class PriceName_PriceList_test { @istest static void PriceName_PriceListMethod(){ PriceName_PriceList priceObj = new PriceName_PriceList(); Product_Line_Item__c prl = New Product_Line_Item__c(); prl = [SELECT Product_Name__r.name, List_Price__c FROM Product_Line_Item__c]; prl.Product_Name__r.name = 'testproduct'; prl.List_Price__c = 123; insert prl; PriceObj.getdetails(); } }
问题根因
Salesforce中Apex类覆盖率统计时出现高亮异常,本质是关联测试类执行失败,测试流程根本没有触达到目标类的可执行代码,覆盖率引擎无法生成正确的统计结果。你的测试类存在3个致命逻辑错误:
- 违反测试数据隔离规则:Apex测试默认开启数据隔离(
SeeAllData=false),测试上下文无法读取生产环境的真实数据,你在没有插入任何测试数据的前提下直接执行Product_Line_Item__c的SOQL查询,会直接抛出「查询无结果」的运行时异常,测试方法直接终止,后续代码完全不会执行。 - 关联字段赋值逻辑错误:直接给
prl.Product_Name__r.name这类跨对象关联引用的内存字段赋值是无效操作,DML执行时不会同步更新父对象记录;如果Product_Name__c查找字段本身为空,这行代码还会直接抛出空指针异常。 - 执行顺序完全颠倒:你先初始化记录、执行SOQL查询,再给字段赋值、执行插入操作,查询动作早于数据插入,永远无法拿到你构造的测试数据。
修复方案
按照Apex测试的标准规范重写测试逻辑:
- 按照依赖顺序构造测试数据:先创建父级产品记录,再创建关联的产品线项目记录,给查找字段赋值父记录ID,不要直接修改关联对象的内存属性
- 调整执行顺序:先完成所有测试数据的DML插入,再在测试上下文边界内调用目标类的业务方法
- 补充结果断言,验证目标方法的执行输出符合预期,避免空跑测试
参考修正后的代码:
@isTest public class PriceName_PriceList_test { @isTest static void PriceName_PriceListMethod(){ // 构造父级产品测试数据 Product2 testProduct = new Product2( Name = 'testproduct', IsActive = true ); insert testProduct; // 构造产品线项目记录,关联父产品 Product_Line_Item__c prl = new Product_Line_Item__c( Product_Name__c = testProduct.Id, List_Price__c = 123 ); insert prl; // 执行目标类方法 Test.startTest(); PriceName_PriceList priceObj = new PriceName_PriceList(); priceObj.getdetails(); Test.stopTest(); // 补充断言逻辑,验证方法执行结果符合预期 // 示例:System.assertEquals(预期值, 实际查询到的结果值); } }
修正后保存测试类,重新运行全部测试,测试通过后刷新覆盖率统计页面,代码高亮异常的问题会自动消失,覆盖率数据也会正常计算。
内容的提问来源于stack exchange,提问作者user19546315
相关产品推荐
相关产品推荐

