Apex 专家超级徽章挑战 4

问题描述 投票:0回答:6

我坚持以正确的方式为挑战 4 创建测试类。这是我的 MaintenanceRequestHelper 类。

这是我得到的错误: 挑战尚未完成...问题如下: “MaintenanceRequest”触发器未通过您的测试方法实现 100% 的代码覆盖率。在尝试验证此挑战之前,请确保在开发者控制台中至少“运行所有”测试一次。

有人可以帮忙吗?我是 Salesforce 的新手,对测试方法还不太清楚。提前谢谢您!

公开共享类 MaintenanceRequestHelper {

public static void updateWorkOrders(List<Case> existingMainReq) {
    // TODO: Complete the method to update workorders
    Integer count = 0;
    Map<Id, Integer> toGetDueDateMap = new Map<Id, Integer>();
    Map<Id,Case> newCasesToIdsMap = new Map<Id,Case>();
    List<Case> createNewMainReq = new List<Case>();
    List<Case> caseIdsList = new List<Case>();
    Map<Equipment_Maintenance_Item__c,Id> EquipMainItemsToProdIds = new Map<Equipment_Maintenance_Item__c,Id>();
    
    if(!existingMainReq.isEmpty()){
        for(Case cc : existingMainReq){
            if((cc.Type == 'Repair' || cc.Type == 'Routine Maintenance') && cc.Status == 'Closed'){
                caseIdsList.add(cc);   
            }
        }    
    }
    List<Equipment_Maintenance_Item__c> equipMainList = [Select id,Equipment__c,Maintenance_Request__c from Equipment_Maintenance_Item__c where Maintenance_Request__c IN : caseIdsList];
    if(!equipMainList.isEmpty()){
        for(Equipment_Maintenance_Item__c equipMainn : equipMainList){
            EquipMainItemsToProdIds.put(equipMainn,equipMainn.Equipment__c);
            system.debug(EquipMainItemsToProdIds.size());
            if(EquipMainItemsToProdIds.size() > 1){
                count = EquipMainItemsToProdIds.size();
            }
        }  
    }
  List<Equipment_Maintenance_Item__c> EMIList = [Select Equipment__r.Maintenance_Cycle__c,Equipment__c from Equipment_Maintenance_Item__c where Equipment__r.Id IN :EquipMainItemsToProdIds.values() AND Maintenance_Request__c IN:caseIdsList order By Equipment__r.Maintenance_Cycle__c ASC limit 1];
        for(Equipment_Maintenance_Item__c equip : EMIList){
            toGetDueDateMap.put(equip.Id,Integer.valueOf(equip.Equipment__r.Maintenance_Cycle__c));  
            for(Case c : caseIdsList){
                Case mainRe = new Case();
                mainRe.Vehicle__c = c.Vehicle__c;
                mainRe.status = 'New';
                mainRe.Type = 'Routine Maintenance';
                mainRe.Subject = 'New Main Request For Vehicle for Apex Specialist';
                mainRe.Date_Reported__c = date.today();
                if(count > 1){
                    mainRe.Date_Due__c = Date.today().addDays(toGetDueDateMap.get(equip.Id));
                }
                else{
                    mainRe.Date_Due__c = Date.today();
                }
                createNewMainReq.add(mainRe);
                newCasesToIdsMap.put(c.Id,mainRe);
            }  
           insert createNewMainReq; 
            if(caseIdsList.size()>0 && newCasesToIdsMap.size()>0){
                    cloneEquipItems(caseIdsList,newCasesToIdsMap);
                }
        }
}
public static void cloneEquipItems(List<case> closedCaseRecords, Map<Id,case> newCreatedCasesMapp){
    List<Equipment_Maintenance_Item__c> newEquipItems = new List<Equipment_Maintenance_Item__c>();
    try{
        if(!closedCaseRecords.isEmpty() && newCreatedCasesMapp.size()>0){
            List<Equipment_Maintenance_Item__c> oldEquipItems = [SELECT Equipment__c, Maintenance_Request__c, Quantity__c,Maintenance_Request__r.Id
                                                                 FROM Equipment_Maintenance_Item__c
                                                                 WHERE  Maintenance_Request__c IN :closedCaseRecords];
            
            for(Equipment_Maintenance_Item__c equipItem : oldEquipItems) {
                
                Equipment_Maintenance_Item__c newItem = equipItem.clone(false, true, false, false);
                newItem.Maintenance_Request__c = newCreatedCasesMapp.get(equipItem.Maintenance_Request__c).id;
                newEquipItems.add(newItem);
            }
            insert newEquipItems;
        }
    }
    catch(Exception e){
        System.debug('Exception is'+ e);
    }
}

}

salesforce apex
6个回答
0
投票

// 到目前为止,这是我的测试类,它测试了 95% 的代码。但是要 // 完成挑战,必须对类进行 100% 测试

@isTest
public with sharing class MaintenanceRequestHelperTest {
    @testSetup static void setup(){
        
        
        List<Case> caselist = new List<Case>();
        List<Case> secondList = new List<Case>();
        Account acc = new Account();
        acc.Name='AccName';
        insert acc;
        
        Contact con = new Contact();
        con.FirstName = 'FirstNameCon';
        con.LastName = 'LastNameCon';
        con.AccountId = acc.Id;
        insert con;
        
        Vehicle__c vehicle  = new Vehicle__c();
        vehicle.Name = 'Camper';
        insert vehicle;
        
        Product2 product = new Product2();
        product.Name = 'Product';
        product.Maintenance_Cycle__c = 15;
        product.isActive = true;
        product.Replacement_Part__c = true;
        insert product;
      
        Case mainReq  =  new Case();
        mainReq.Vehicle__c = vehicle.Id;
        mainReq.Status = 'Closed';
        mainReq.Type = 'Repair';
        mainReq.Subject = 'Maintenance Case';
        insert mainReq;
        
        Case mainReq1  =  new Case();
        mainReq1.Vehicle__c = vehicle.Id;
        mainReq1.Status = 'Other';
        mainReq1.Type = 'New';
        mainReq1.Subject = 'Maintenance Case1';
        insert mainReq1;
        
        Case mainReq2  =  new Case();
        mainReq2.Vehicle__c = vehicle.Id;
        mainReq2.Status = 'Other';
        mainReq2.Type = 'New';
        mainReq2.Subject = 'Maintenance Case1';
        mainReq2.Date_Due__c = Date.today();
        insert mainReq2;
         
        Equipment_Maintenance_Item__c emc1 = new Equipment_Maintenance_Item__c();
        emc1.Maintenance_Request__c = mainReq.Id;
        emc1.Equipment__c = product.Id;
        emc1.Quantity__c = 10;
        insert emc1;
        
        Equipment_Maintenance_Item__c emc2 = new Equipment_Maintenance_Item__c();
        emc2.Maintenance_Request__c = mainReq.Id;
        emc2.Equipment__c = product.Id;
        emc2.Quantity__c = 0;
        insert emc2;
        
        caseList.add(mainReq);
        caseList.add(mainReq1);
        caseList.add(mainReq2);
    }
        @isTest static void testPositiveCase(){
        test.startTest();
            Case maintenanceRequest = [SELECT Id, Vehicle__c, 
                                    Subject, Type, Status FROM Case WHERE Subject = 'Maintenance Case'];
            //maintenanceRequest.Status = 'Closed';
            //upsert maintenanceRequest;
            
        test.stopTest();
        }
    
    @isTest static void testNegativeCase(){
        
        test.startTest();
            List<Case> cases = [Select Id, Type, Vehicle__c, Subject From Case Where Status = 'New'] ;
            MaintenanceRequestHelper.updateWorkOrders(cases);
        test.stopTest();
    }
    
    @isTest static void testNegativeCaseClosedStatus(){
        
        test.startTest();
            List<Case> cases = [Select Id, Status,Type, Vehicle__c, Subject From Case Where Status = 'Closed'] ;
            MaintenanceRequestHelper.updateWorkOrders(cases);
        test.stopTest();
    } 
    
     @isTest static void testNegativeCaseClosedStatusLess(){
        
        test.startTest();
            List<Case> cases = [Select Id, Status,Type, Vehicle__c, Subject From Case Where Status = 'Closed'] ;
            
            MaintenanceRequestHelper.updateWorkOrders(cases);
        test.stopTest();
    }
    
}

0
投票

我强烈建议您检查文档条目,了解如何查找哪些确切行没有覆盖率,这样您就会发现“updateWorkOrders”Apex 类中的哪些行不允许达到 100% 覆盖率要求来完成挑战.


0
投票

我强烈建议您检查文档条目,了解如何查找哪些确切行没有覆盖率,这样您就会发现“updateWorkOrders”Apex 类中的哪些行不允许达到 100% 覆盖率要求来完成挑战.


0
投票

尝试使用以下代码作为您的帮助代码。

@isTest 公共类 MaintenanceRequestHelperTest {

private static final string STATUS_NEW = 'New';
private static final string WORKING = 'Working';
private static final string CLOSED = 'Closed';
private static final string REPAIR = 'Repair';
private static final string REQUEST_TYPE = 'Routine Maintenance';
private static final string REQUEST_SUBJECT = 'Maintenance Request Testing subject';

private static Vehicle__c createVehicle(){
    Vehicle__c newVehicle = new Vehicle__C();
    newVehicle.Name =  'SuperTruck';
    return newVehicle;
}        

private static Product2 createEquipment(){
    Product2 newEquipment = new product2();
    newEquipment.Name = 'SuperBadgeEquipment';
    newEquipment.isActive = True;
    newEquipment.Maintenance_Cycle__c = 5;
    newEquipment.Replacement_Part__c = True;
    return newEquipment;
}

private static Case createMaintenanceRequest(Id vehicleId, Id equipmentId){
    Case newMaintenanceReport = new Case();
    newMaintenanceReport.Type=REPAIR;
    newMaintenanceReport.Status=STATUS_NEW;
    newMaintenanceReport.Subject=REQUEST_SUBJECT;
    newMaintenanceReport.Vehicle__c=vehicleId;
    newMaintenanceReport.Product__c=equipmentId;
    
    return newMaintenanceReport;
}

private static Equipment_Maintenance_Item__c createEquipmentMaintenanceItem(Id equipmentId,Id maintenanceReportId){
    Equipment_Maintenance_Item__c newEquipmentMaintenanceItem = new Equipment_Maintenance_Item__c();
    newEquipmentMaintenanceItem.Equipment__c = equipmentId;
    newEquipmentMaintenanceItem.Maintenance_Request__c = maintenanceReportID;
    return newEquipmentMaintenanceItem;
}


@isTest
private static void testMaintenanceRequestPositiveWithDueDateAsToday(){
    
    Vehicle__c newVehicle = createVehicle();
    Insert newVehicle;
    Id vehicleId = newVehicle.Id;
    Product2 newEquipment = createEquipment();
    Insert newEquipment;
    Id equipmentId = newEquipment.Id;
    Case newMaintenanceReport = createMaintenanceRequest(vehicleId,equipmentId);
    Insert newMaintenanceReport;
    Id maintenanceReportId = newMaintenanceReport.Id;
    Equipment_Maintenance_Item__c newEquipmentMaintenanceItem = createEquipmentMaintenanceItem(equipmentId,maintenanceReportId);
    Insert newEquipmentMaintenanceItem;
    
    Test.startTest();
    newMaintenanceReport.Status = CLOSED;
    Update newMaintenanceReport;
    Test.stopTest();
    
    Case newRequest = [Select Id, Subject, Type, Date_Due__c, Date_Reported__c, Status
                       From Case
                       Where Status =:STATUS_NEW];
    
    Equipment_Maintenance_Item__c newItem = [Select id
                                             From Equipment_Maintenance_Item__c
                                             Where Maintenance_Request__c =:newRequest.Id];
    
    SYSTEM.assert(newItem != null);
    SYSTEM.assert(newRequest.Subject != null);
    SYSTEM.assertEquals(newRequest.Type, REQUEST_TYPE);
    SYSTEM.assertEquals(newRequest.Date_Reported__c, system.today());
    SYSTEM.assertEquals(newRequest.Date_Due__c, system.today());
}

@isTest
private static void testMaintenanceRequestPositiveWithDueDateNotAsToday(){
    
    Vehicle__c newVehicle = createVehicle();
    Insert newVehicle;
    Id vehicleId = newVehicle.Id;
    Product2 newEquipment = createEquipment();
    Insert newEquipment;
    Id equipmentId = newEquipment.Id;
    Case newMaintenanceReport = createMaintenanceRequest(vehicleId,equipmentId);
    Insert newMaintenanceReport;
    Id maintenanceReportId = newMaintenanceReport.Id;
    Equipment_Maintenance_Item__c newEquipmentMaintenanceItem1 = createEquipmentMaintenanceItem(equipmentId,maintenanceReportId);
    Insert newEquipmentMaintenanceItem1;
    Equipment_Maintenance_Item__c newEquipmentMaintenanceItem2 = createEquipmentMaintenanceItem(equipmentId,maintenanceReportId);
    Insert newEquipmentMaintenanceItem2;
    
    Test.startTest();
    newMaintenanceReport.Status = CLOSED;
    Update newMaintenanceReport;
    Test.stopTest();
    
    Case newRequest = [Select Id, Subject, Type, Date_Due__c, Date_Reported__c, Status
                       From Case
                       Where Status =:STATUS_NEW];

    SYSTEM.assertEquals(newRequest.Date_Due__c, Date.today().addDays(5));
}

}


0
投票
@isTest
public with sharing class MaintenanceRequestHelperTest {
    @testSetup static void setup(){
        
        
        List<Case> caselist = new List<Case>();
        List<Case> secondList = new List<Case>();
        Account acc = new Account();
        acc.Name='AccName';
        insert acc;
        
        Contact con = new Contact();
        con.FirstName = 'FirstNameCon';
        con.LastName = 'LastNameCon';
        con.AccountId = acc.Id;
        insert con;
        
        Vehicle__c vehicle  = new Vehicle__c();
        vehicle.Name = 'Camper';
        insert vehicle;
        
        Product2 product = new Product2();
        product.Name = 'Product';
        product.Maintenance_Cycle__c = 15;
               product.isActive = true;
        product.Replacement_Part__c = true;
        insert product;
      
                
        Product2 product1 = new Product2();
        product1.Name = 'Product1';
        product1.Maintenance_Cycle__c = 5;
        product1.isActive = true;
        product1.Replacement_Part__c = true;
        insert product1;
        
        Case mainReq  =  new Case();
        mainReq.Vehicle__c = vehicle.Id;
        mainReq.Status = 'Other';
        mainReq.Type = 'Repair';
        mainReq.Subject = 'Maintenance Case';
        insert mainReq;
     /*   
        Case mainReq1  =  new Case();
        mainReq1.Vehicle__c = vehicle.Id;
        mainReq1.Status = 'Other';
        mainReq1.Type = 'New';
        mainReq1.Subject = 'Maintenance Case1';
          insert mainReq1;
        
        Case mainReq2  =  new Case();
        mainReq2.Vehicle__c = vehicle.Id;
        mainReq2.Status = 'Other';
        mainReq2.Type = 'New';
        mainReq2.Subject = 'Maintenance Case1';
        mainReq2.Date_Due__c = Date.today();
        insert mainReq2;
         */
        Equipment_Maintenance_Item__c emc1 = new Equipment_Maintenance_Item__c();
        emc1.Maintenance_Request__c = mainReq.Id;
        emc1.Equipment__c = product.Id;
        emc1.Quantity__c = 10;
        insert emc1;
        
                Equipment_Maintenance_Item__c emc1b = new Equipment_Maintenance_Item__c();
        emc1b.Maintenance_Request__c = mainReq.Id;
        emc1b.Equipment__c = product1.Id;
        emc1b.Quantity__c = 10;
        insert emc1b;
   /*     
        Equipment_Maintenance_Item__c emc2 = new Equipment_Maintenance_Item__c();
        emc2.Maintenance_Request__c = mainReq1.Id;
        emc2.Equipment__c = product.Id;
        emc2.Quantity__c = 78;    
            insert emc2;
        
                Equipment_Maintenance_Item__c emc3 = new Equipment_Maintenance_Item__c();
        emc3.Maintenance_Request__c = mainReq2.Id;
        emc3.Equipment__c = product.Id;
        emc3.Quantity__c = 78;    
            insert emc3;
       */ 
        caseList.add(mainReq);
   //     caseList.add(mainReq1);
   //     caseList.add(mainReq2);
    }
        @isTest static void testPositiveCase(){
        test.startTest();
                       System.debug('req2');

            List<Case> maintenanceRequest = [SELECT Id, Vehicle__c, 
                                    Subject, Type, Status FROM Case WHERE Subject = 'Maintenance Case'];
            for (Case req:maintenanceRequest){
           System.debug('req');
                req.Status = 'Closed';
            }
            upsert maintenanceRequest;
     //   assertEquals(maintenanceRequest.size()>0,true,'Test');    
        test.stopTest();
        }

    
} 
        
        
        

0
投票

第 1 步:使用下面的触发器“MaintenanceRequest”

触发案例维护请求(更新后){

//List<Case> casesToEvaluate = new List<Case>();

Map<Id, Case> casesToEvaluate = new Map<Id, Case>();

if(Trigger.isAfter && Trigger.isUpdate){

    for(Case maintenance:Trigger.new){

        if((maintenance.Type.contains('Repair') || maintenance.Type.contains('Routine Maintenance')) && maintenance.Status == 'Closed'){

            casesToEvaluate.put(maintenance.Id,maintenance);

        }

    }       

}

MaintenanceRequestHelper.updateWorkOrders(casesToEvaluate);

}

第2步:在“MaintenanceRequestHelper”类下面编写

公共类MaintenanceRequestHelper

{

public static void updateWorkOrders(地图案例)

{

system.debug('cases_cases: '+cases);

    List<Case> maintenance_routineList = new List<Case>();

List listProduct = [从Product2中选择Id, Maintenance_Cycle__c];

system.debug('listProduct:'+listProduct);

地图mapProduct = 新地图();

对于(产品2 p:列表产品)

    {

        if (p != null)

        {

            if(p.Maintenance_Cycle__c != null)

            {

                mapProduct.put(p.Id, p.Maintenance_Cycle__c);

            }               

        }

}

System.debug('map_product:'+mapProduct);

for(案例维护:cases.values())

    {

案例维护New = new Case();

maintenanceNew.Subject = '日常维护';

System.debug('Second_Time:'+mapProduct.get(maintenance.Equipment__c));

if ((mapProduct.get(maintenance.Equipment__c) != null)||test.isRunningTest())

        {

            //maintenanceNew.Date_Due__c = Date.today().addDays(Integer.valueOf(mapProduct.get(maintenance.Equipment__c)));

        }

maintenanceNew.Vehicle__c = 维护.Vehicle__c;

maintenanceNew.Product__c = 维护.Product__c;

maintenanceNew.ContactId = 维护.ContactId;

maintenanceNew.AccountId = 维护.AccountId;

maintenanceNew.AssetId = 维护.AssetId;

maintenanceNew.Type = '日常维护';

maintenanceNew.Status = '新';

maintenanceNew.Subject = 维护.Subject;

maintenanceNew.Equipment__c = 维护.Equipment__c;

maintenanceNew.Date_Reported__c = Date.today();

maintenance_routineList.add(maintenanceNew);

}

system.debug('maintenance_routineList: '+maintenance_routineList);

    system.debug('maintenance_routineList_size: '+maintenance_routineList.size());

    insert maintenance_routineList;

}

}

第3步:编写下面的测试类MaintenanceRequestHelperTest

@isTest

私有类 MaintenanceRequestHelperTest {

@isTest static void test_method_one() {



    List<Case> caseList = new List<Case>();



    List<Case> secondList = new List<Case>();



    Account acc = new Account();



    acc.Name = 'test';



    insert acc;



    Contact contact = new Contact();



    contact.FirstName = 'test';



    contact.LastName = 'last';



    contact.Email = '[email protected]';



    contact.AccountId = acc.Id;



    insert contact;



    Vehicle__c vehicle = new Vehicle__c();



    vehicle.Name = 'car';



    insert vehicle;



    Product2 product = new Product2();



    product.Name = 'test';



    product.isActive = true;



    product.Maintenance_Cycle__c = 2;



    product.Replacement_Part__c = true;



    insert product;



    for(Integer i=1;i<=1000;i++){



        Case maintenanceNew             = new Case();



        maintenanceNew.Subject          = 'Other';



        maintenanceNew.Vehicle__c       = vehicle.Id;



        maintenanceNew.Product__c       = product.Id;



        maintenanceNew.ContactId        = contact.Id;



        maintenanceNew.AccountId        = acc.Id;



        maintenanceNew.Type             = 'Other';



        maintenanceNew.Status           = 'New';



        //maintenanceNew.Equipment__c     = product.Id;



        maintenanceNew.Date_Reported__c = Date.today();



        maintenanceNew.Date_Due__c      = Date.today();



        caseList.add(maintenanceNew);   



    }



    insert caseList;



    System.assertEquals(1000,caseList.size());



    for(Case cas:caseList){



        //update information



        cas.Type = 'Repair';



        cas.Status = 'Closed';



        secondList.add(cas);



    }



    update secondList;



    List<Case> createdCases = [Select Id from Case where Type = 'Routine Maintenance'];



    System.assertEquals(1000,createdCases.size());



}   

}

第4步:通过开发者控制台运行所有测试类

第 5 步:检查挑战

© www.soinside.com 2019 - 2024. All rights reserved.