首页 > 解决方案 > 测试类覆盖率在 71% 后没有增加。“粗体斜体部分不在测试类中。”

问题描述

在此处输入图像描述触发器工作完全正常,但它没有提供 100% 的代码覆盖率。Test 类的主要问题,它没有涵盖 Role__c 的 if 条件。

 Trigger: 
    trigger DrawingSharing on Drawing__c (after insert) {    
        if(trigger.isInsert){ 
            for (Drawing__c draw : Trigger.new){  
                System.debug('draw: '+draw);
                List<Installation__c> ListInstalltionList = new List <Installation__c>();
                for(String installationActivityList :draw.Installation_Activity__c.split(';')){
                    Installation__c inst = new Installation__c();
                    inst.Drawing_ID__c = draw.Id;
                    inst.Installation_Activity__c=installationActivityList;
                    inst.Execution__c=draw.Execution_ID__c;
                    inst.Floor__c=draw.Floors__c;
                    ListInstalltionList.add(inst);
                }
                system.debug('ListInstalltionList==>'+ListInstalltionList);
                insert ListInstalltionList;            
                List<Drawing__c> newList = new List<Drawing__c>();
                newList.add(draw);
                Map <Id,Id> DrawingProjectMap = new Map<Id,Id>();
                Map<Id,Drawing__c> drawingIdObjMap = new Map<Id,Drawing__c>([select id, name,Approver__c, Execution_ID__r.Project__c from Drawing__c where id in :newList limit 1]);
                for(Drawing__c Drawing : drawingIdObjMap.values())
                { 
                    DrawingProjectMap.put(Drawing.Id,Drawing.Execution_ID__r.Project__c);
                }
                system.debug(DrawingProjectMap);
                Map<Id,RoleObjectSharing__mdt> roleobjaccessmap = new Map<Id,RoleObjectSharing__mdt>([select id,Object__c,role__c,Accesslevel__c from RoleObjectSharing__mdt where Object__c='Drawing']);
                Map<String,String> RoleAccessmap = new Map<String,String>(); 
                for(RoleObjectSharing__mdt Robj : roleobjaccessmap.values()){
                    RoleAccessmap.put(Robj.role__c,Robj.Accesslevel__c);   
                }
                system.debug(RoleAccessmap.keySet());
                system.debug(DrawingProjectMap.values());           
                Map<Id,Projects__c> teamrolemap = new Map<Id,Projects__c>([select Id,(select id, User_Lookup__c,Role__c from TeamRoles__r where Role__c in:RoleAccessmap.keySet()) from Projects__c where Id in :DrawingProjectMap.values()]);
                system.debug('teamrolemap'+teamrolemap);
                List <Drawing__Share> DrawShareList = new List<Drawing__Share>();
                List <Drawing__c> DrawList = new List<Drawing__c>(); 
                INTEGER countFound = 0;
                for(Drawing__c drawobj : newList){                                                         
                    Projects__c proj = teamrolemap.get(DrawingProjectMap.get(drawobj.id));
                    system.debug(proj.teamroles__r);
                    ***for(teamroles__c tr : proj.teamroles__r){
                        system.debug(tr);
                        if(tr.Role__c == 'PlanningEngineer' || tr.Role__c == 'AssistantPlanningEngineer' || tr.Role__c == 'PlanningManager' || tr.Role__c == 'AssistantPlanningManager' && countFound <=0) {
                            countFound = countFound + 1;
                            Drawing__c ddd = drawingIdObjMap.values();
                            ddd.Approver__c = tr.User_Lookup__c;
                            DrawList.add(ddd);
                        }     
                        Drawing__Share recruiterShr = new Drawing__Share();
                        recruiterShr.ParentId = drawobj.Id;   
                        recruiterShr.UserOrGroupId = tr.User_Lookup__c;
                        recruiterShr.AccessLevel = RoleAccessmap.get(tr.role__c);
                        recruiterShr.RowCause = tr.role__c+'__c';
                        DrawShareList.add(recruiterShr);***
                    }
                    system.debug(DrawShareList);
                }
                upsert DrawList; 
                Database.SaveResult[] lsr = Database.insert(DrawShareList,false);
                Integer i=0;
                for(Database.SaveResult sr : lsr){
                    if(!sr.isSuccess()){     
                    }
                    i++;
                } 
            }
        }  
    }
    
    
    Test Class:
    
    static testMethod void Test4(){ 
            System.debug('TestSharing = Test4'); 
            Test.startTest();        
            Projects__c proj = new Projects__c();
            proj.Name = 'Hello';
            proj.LL_Location__c='Mumbai';
            insert proj;
            
            TeamRoles__c tr1 = new TeamRoles__c();
            tr1.User_Lookup__c = UserInfo.getUserId(); 
            tr1.Role__c = 'PlanningEngineer';
            tr1.Project_Name__c = proj.Id;
            insert tr1;
            
            TeamRoles__c tr2 = new TeamRoles__c();
            tr2.User_Lookup__c = UserInfo.getUserId(); 
            tr2.Role__c = 'PlanningManager';
            tr2.Project_Name__c = proj.Id;
            insert tr2;
            
            Execution__c ex = new Execution__c();
            ex.Project__c = proj.Id;
            insert ex;
            
            Item_Master__c ItemeMaster = new Item_Master__c();
            ItemeMaster.Item_Description__c = 'testing';
            ItemeMaster.Item_Code__c = 'testing';
            insert ItemeMaster;
            
            Project_Items__c projItems = new Project_Items__c();
            projItems.Total_PO_Quantity__c = 0;
            projItems.ItemMaster__c = ItemeMaster.Id;
            projItems.Execution__c = ex.Id;
            insert projItems;
            
            List<TeamRoles__c> lstTR = new List<TeamRoles__c>();
            TeamRoles__c tr7 = new TeamRoles__c();
            tr7.User_Lookup__c = UserInfo.getUserId();
            tr7.Role__c = 'PlanningEngineer';
            tr7.Project_Name__c = proj.Id;
            lstTR.add(tr7);
            
            List<Drawing__c> d= new List<Drawing__c>(); 
            Drawing__c draw = new Drawing__c();
            draw.Execution_Id__c = ex.Id;
            draw.Floors__c='5F';
            draw.Installation_Activity__c='Cable Tray';
            draw.Drawing_Line_Items_Count__c = 0;
            d.add(draw);
            insert d;
            //insert draw;
            
            Installation__c inst = new Installation__c();
            inst.Drawing_ID__c=draw.Id;
            inst.Floor__c= draw.Floors__c;
            inst.Installation_Activity__c='Cable Tray';
            inst.As_built_Marked_Drawing_Prepared_by_Site__c =False;
            inst.Execution__c = ex.Id;
            insert inst;
            
            SharingUtilityClass suc = new SharingUtilityClass();
            suc.initObjSharing(lstTR);
            
            Drawing_Line_Items__c dll = new Drawing_Line_Items__c();
            dll.Drawing_Number__c = draw.Id;
            dll.Project_Items__c = projItems.Id;
            dll.Project_Name__c = proj.Id;
            dll.Installation_Activity__c='Cable Tray';
            dll.GFC_Quantity__c = 15;
            dll.Shop_Drawing_Quantity__c = 20;
            dll.GFC_Drawing_Line_Item_Done__c = true;
            dll.Shop_Drawing_Line_Item_Done__c=true;
            insert dll;
            
            Installation_Line_Items__c instline = new Installation_Line_Items__c();
            instline.Installation__c = inst.Id;
            instline.Project_Items__c = projItems.Id;
            instline.Installation_Activity__c='Cable Tray';
            instline.Total_installed_quantity_DPR_Quantity__c = 100.00;
            insert instline;

List<Drawing_Line_Items__c> listProj2 = CircularProgressController.getDrawingLineItem(dll.Id); List<Drawing_Line_Items__c> listProj3 = CircularProgressController.getDrawingLineItemShop(dll.Id); List<Drawing__c> listProj4 = Drawing.getDrawing(draw.Id); List<Project_Items__c> listProj5 = Drawing.getProjectItems(ex.Id);

        Test.stopTest(); 
    }

标签: salesforcecode-coverageapexapex-codesalesforce-lightning

解决方案


如果有正在从该行调试的团队角色

for(teamroles__c tr : proj.teamroles__r){
    system.debug(tr);

然后我会检查这是否true在测试上下文中进行评估:

if(tr.Role__c == 'PlanningEngineer' || tr.Role__c == 'AssistantPlanningEngineer' || tr.Role__c == 'PlanningManager' || tr.Role__c == 'AssistantPlanningManager' && countFound <=0)

推荐阅读