Salesforce Apex批处理类启动方法未运行

Salesforce Apex批处理类启动方法未运行,salesforce,apex-code,Salesforce,Apex Code,我有一节课 global class apexBatch implements Database.Batchable<sObject>{ global final string query; List<user> lstUser= new List<user>(); Set<id> setUserID= new Set<id>(); //constructor global apexBatch () { if

我有一节课

 global class apexBatch implements Database.Batchable<sObject>{
 global final string query;
List<user>  lstUser= new List<user>();
Set<id>     setUserID= new Set<id>();



//constructor
global apexBatch () {
    if (system.Test.isRunningTest())
    {
        this.query='SELECT id FROM user limit 100';
    }
    else
    {
        this.query='SELECT id FROM user ;
    }
}


global Database.QueryLocator start(Database.BatchableContext BC) {

    return Database.getQueryLocator(query);
}

global void execute(Database.BatchableContext BC, List<sObject> scope) {

// do some processing


}

global void finish(Database.BatchableContext BC) {

}
当我检查代码覆盖率时,我只能看到构造函数被覆盖了,start和execute方法根本没有被覆盖

你知道这是什么原因吗


谢谢运行测试时,调试日志中是否有异常?这与我用于测试批处理类的方法完全相同,因此我使用了这段代码(我知道它很简单),在第二个查询中添加了缺少的close引号(我假设您的代码确实正确保存了,这不是问题!),并将测试代码放入一个类中,确保它正确地覆盖了批处理代码


最后,我最近看到了一些关于测试覆盖率报告的奇怪问题——您目前如何运行测试?我只是运行了组织中的所有测试,并获得了90%的覆盖率(由于明显的原因,它错过了第二行查询)。

这是我的断言引发的异常。但是如果断言失败,它不会覆盖代码吗?断言之后的任何测试都不会发生,这可能会限制您的覆盖范围-其思想是,除了覆盖代码之外,您还使用断言来确保代码按预期运行。
       Test.startTest(); 
    apexBatch ba = new apexBatch();

    Database.executeBatch(ba);
      Test.stopTest();