【问题标题】:Apex batch class start method not runningApex 批处理类启动方法未运行
【发布时间】:2012-03-13 09:48:56
【问题描述】:

我有一个批处理顶点类

 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) {

}

我正在使用这段代码从测试类调用这个类

       Test.startTest(); 
    apexBatch ba = new apexBatch();

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

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

知道是什么原因造成的

谢谢

【问题讨论】:

    标签: salesforce apex-code


    【解决方案1】:

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

    最后,我最近发现了一些关于测试覆盖率报告的奇怪问题——你目前是如何运行测试的?我刚刚在 Org 中运行了所有测试并获得了 90% 的覆盖率(由于显而易见的原因,它错过了第二个查询行)。

    【讨论】:

    • 这是我的断言引发的异常。但是如果断言失败,它不会覆盖代码吗?
    • 断言之后的任何测试都不会发生,这可能会限制您的覆盖范围——这个想法是,除了覆盖代码外,您还使用断言来确保代码按预期运行。
    猜你喜欢
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多