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

检查Apex类代码覆盖率时代码被高亮异常问题咨询

问题现象

核查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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:27:18