我有一个Schedulable类,每晚会被调用一次。我匿名运行代码,一切正常。我遇到的问题是我无法获得适当的测试报道!我编写了一个我认为应该可以工作的测试类,但由于某些原因,我的for循环中的任何行都没有被覆盖。
我认为这是因为没有从这些查询返回数据,但是应该返回数千条记录。我已经在生产环境中运行查询而没有任何问题。
是否有可在可调度类中运行查询的单独进程?
以下是我班级的一部分:
global class UpdateUnitPrice implements Schedulable{
global void execute(SchedulableContext sc){
// OwnerId -> List of Strings with Row Contents
Map<Id,Map<Id,Map<String,String>>> updateContainer = new Map<Id,Map<Id,Map<String,String>>>{}; // Covered
List<Id> ownerContainer = new List<Id>{}; // Covered
String EmailMessage; // Covered
String EmailLine; // Covered
String EmailAddedLines; // Covered
String CurrentEmailLine; // Covered
String NewEmailLine; // Covered
List<Id> opportunityList = new List<Id>{}; // Covered
for(Opportunity thisOpp :[SELECT Id,Name FROM Opportunity WHERE Order_Proposed__c = null])
{
// Thousands of records should be returned
opportunityList.add(thisOpp.Id); // NOT COVERED!!
}
List<OpportunityLineItem> OppLineItemList = new List<OpportunityLineItem>{}; // Covered
for(OpportunityLineItem thisOppProd : [SELECT Id,OpportunityId,Opportunity.OwnerId,Opportunity.Name,Product_Name__c,UnitPrice,ListPrice
FROM OpportunityLineItem
WHERE OpportunityId IN :opportunityList
AND UnitPrice_lt_ListPrice__c = 'True'
ORDER BY OpportunityId ASC])
{
. . . // NO LINES COVERED WITHIN THIS LOOP
}
. . .
}
}
这是我的测试类:
@isTest
private class UpdateUnitPriceTest {
static testMethod void myUnitTest() {
Test.startTest();
// Schedule the test job
String jobId = System.schedule('UpdateUnitPrice','0 0 0 3 9 ? 2022',new UpdateUnitPrice());
// Get the information from the CronTrigger API object
CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = :jobId];
// Verify the expressions are the same
System.assertEquals(ct.CronExpression,'0 0 0 3 9 ? 2022');
// Verify the job has not run
System.assertEquals(0, ct.TimesTriggered);
// Verify the next time the job will run
System.assertEquals('2022-09-03 00:00:00', String.valueOf(ct.NextFireTime));
Test.stopTest();
}
}
我是否应该专门引用这些for循环中的内容来触发它们?这个类应该能够只运行它自己的所有内容,而无需插入测试记录。我错过了什么?
提前感谢您提供任何帮助!
答案 0 :(得分:2)
API 24.0中添加了一个可爱的功能,它要求测试类包含一小段(新)代码,以便查看查询数据。我不知道为什么会这样,但确实让我感到震惊。
要让我们的测试类正常运行,他们现在必须在顶部有以下内容:
@isTest (SeeAllData = true)
以前,所需要的只是:
@isTest
您可以在此处详细了解测试类和此新“功能”:Apex Test Class Annotations