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();