Apex class 在触发器中被调用,基于一些 conditions.Test class 通过测试但代码覆盖率仍然为 0%

Apex class is called in a trigger based on some conditions.Test class passes the test but code coverage is stil 0%

当工作订单更新为已完成时,需要使用工作订单中的两个字段值和另一个对象 att 中的两个字段值来创建新的水表读数记录。工作订单和水表读数都有查找(工作订单)和主详细关系(水表读数)与 att.Sorry 这么多代码,但我真的卡住了,需要帮助。

trigger CreateWaterMeterReading on sm1e__smWork_Order__c (after update) 

{   
 if (Trigger.new.size() == 1) 
 {
 sm1e__smWork_Order__c wo = Trigger.new[0];
 if(wo.sm1e__WO_Type__c == 'Meter Read Move In/Out ' && wo.sm1e__Status__c == 'Completed')
 reateNewWaterMeterRead.createWMRforMoveInOrOut(wo.Id);
   }
}
--Apex class


 public class CreateNewWaterMeterRead {

 public static void createWMRforMoveInOrOut(string workorderId)
 {
   Work_Order__c wo = [Select          Equipment__r.Name,Completion_Date__c,Meter_Reading__c from             Work_Order__c where Id = : workorderId ];
        Equipment__c att = [Select Id,Last_Water_Meter_Reading_Date__c,Last_Water_Meter_Reading__c from Equipment__c where Name = : wo.Equipment__r.Name ];

        List<Water_Meter_Readings__c> newwmr = new List<Water_Meter_Readings__c>();
         Water_Meter_Readings__c wmr = new Water_Meter_Readings__c();
        wmr.Meter__c = att.Id;
        wmr.Current_Meter_Reading__c = wo.Meter_Reading__c;
        wmr.Current_Read_Date__c = wo.sm1e__Completion_Date__c;
        wmr.Prior_Meter_Reading__c = att.Last_Water_Meter_Reading__c;
        wmr.Prior_Read_Date__c = att.Last_Water_Meter_Reading_Date__c;
        wmr.Source__c = 'Manual Read';
        newwmr.add(wmr);
        if(newwmr.size() >0)
             insert newwmr;
             }

--测试Class

isTest(SeeAllData = true)
public class CreateNewWaterMeterReadTest 
{
   static testmethod void createWMRforMoveInOrOut()
   {

        Work_Order__c wo = [Select Id,Equipment__r.Name,Completion_Date__c,Meter_Reading__c from Work_Order__c where sm1e__Status__c != 'Completed' AND sm1e__WO_Type__c = 'Meter Read Move In/Out' LIMIT 1];
        Equipment__c att = [Select Id,Last_Water_Meter_Reading_Date__c,Last_Water_Meter_Reading__c from Equipment__c where Name = : wo.Equipment__r.Name ]; 

        test.startTest();
        wo.Meter_Reading__c = 1317;
        wo.sm1e__Status__c = 'Completed';
        update wo;
        test.stopTest();
        System.debug('updated wo');

        Water_Meter_Readings__c wmr = new Water_Meter_Readings__c();
        System.debug('wmr for test');
        wmr.Meter__c= att.Id;
        wmr.Current_Meter_Reading__c = wo.Meter_Reading__c;
        wmr.Current_Read_Date__c = wo.Completion_Date__c;
        System.debug('in between wmr');
        wmr.Prior_Meter_Reading__c = att.Last_Water_Meter_Reading__c;
        wmr.Prior_Read_Date__c = att.Last_Water_Meter_Reading_Date__c;
        wmr.Source__c = 'Manual';
        insert wmr; 

您已在更新后写入触发器。但是在你的测试中 class 你插入了一条记录而不是更新它。这就是为什么您的代码覆盖率为 0%。参考这个

要执行触发器,您必须执行已为其编写触发器的 dml 操作。您还可以通过创建实例从测试 class 调用 class 方法。参考上面 link 相同。