我坚持以正确的方式为挑战 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);
}
}
}
// 到目前为止,这是我的测试类,它测试了 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();
}
}
我强烈建议您检查文档条目,了解如何查找哪些确切行没有覆盖率,这样您就会发现“updateWorkOrders”Apex 类中的哪些行不允许达到 100% 覆盖率要求来完成挑战.
我强烈建议您检查文档条目,了解如何查找哪些确切行没有覆盖率,这样您就会发现“updateWorkOrders”Apex 类中的哪些行不允许达到 100% 覆盖率要求来完成挑战.
尝试使用以下代码作为您的帮助代码。
@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));
}
}
@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();
}
}
第 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);
地图
对于(产品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 步:检查挑战