この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

レポートのテスト

すべての Apex コードと同様に、Salesforce Reports and Dashboards API via Apex コードにはテストカバー率が必要です。

Reporting Apex メソッドはシステムモードでは実行されず、現在のユーザ (コンテキストユーザまたはログインユーザとも呼ばれる) のコンテキストで実行されます。メソッドは、現在のユーザがアクセス権を持つものすべてにアクセスできます。

Apex テストの場合、SeeAllData アノテーションは、truefalse のどちらに設定されていても、レポートの実行で必ず無視されます。つまり、レポート結果には、テストで作成されていない既存のデータが含まれます。レポート実行で SeeAllData アノテーションを無効にする方法はありません。結果を制限するには、レポートで検索条件を使用します。

レポートのテストクラスの作成

次の例では、非同期および同期レポートをテストします。各メソッドでは、次の処理を行います。

  • 新しい Opportunity オブジェクトを作成し、そのオブジェクトを使用してレポートに検索条件を設定する。
  • レポートを実行する。
  • アサーションをコールしてデータを検証する。

Apex テストの場合、Test.stopTest メソッドを使用してテストを停止した後にのみ、非同期レポートが実行されます。

メモ

1@isTest
2public class ReportsInApexTest{
3
4    @isTest(SeeAllData='true')
5    public static void testAsyncReportWithTestData() {
6
7      List <Report> reportList = [SELECT Id,DeveloperName FROM Report where
8          DeveloperName = 'Closed_Sales_This_Quarter'];
9      String reportId = (String)reportList.get(0).get('Id');
10      
11      // Create an Opportunity object.
12      Opportunity opp = new Opportunity(Name='ApexTestOpp', StageName='stage',
13          Probability = 95, CloseDate=system.today());
14      insert opp;
15    
16      Reports.ReportMetadata reportMetadata =
17          Reports.ReportManager.describeReport(reportId).getReportMetadata();
18      
19      // Add a filter.
20      List<Reports.ReportFilter> filters = new List<Reports.ReportFilter>(); 
21      Reports.ReportFilter newFilter = new Reports.ReportFilter();
22      newFilter.setColumn('OPPORTUNITY_NAME');
23      newFilter.setOperator('equals');
24      newFilter.setValue('ApexTestOpp');
25      filters.add(newFilter);
26      reportMetadata.setReportFilters(filters);
27      
28      Test.startTest();
29       
30      Reports.ReportInstance instanceObj =
31          Reports.ReportManager.runAsyncReport(reportId,reportMetadata,false);
32      String instanceId = instanceObj.getId();
33      
34      // Report instance is not available yet.
35      Test.stopTest();
36      // After the stopTest method, the report has finished executing
37      // and the instance is available.
38     
39      instanceObj = Reports.ReportManager.getReportInstance(instanceId);
40      System.assertEquals(instanceObj.getStatus(),'Success');
41      Reports.ReportResults result = instanceObj.getReportResults();
42      Reports.ReportFact grandTotal = (Reports.ReportFact)result.getFactMap().get('T!T');
43      System.assertEquals(1,(Decimal)grandTotal.getAggregates().get(1).getValue());
44    }
45  
46    @isTest(SeeAllData='true')
47    public static void testSyncReportWithTestData() {
48    
49      // Create an Opportunity Object.
50      Opportunity opp = new Opportunity(Name='ApexTestOpp', StageName='stage',
51          Probability = 95, CloseDate=system.today());
52      insert opp;
53      
54      List <Report> reportList = [SELECT Id,DeveloperName FROM Report where
55          DeveloperName = 'Closed_Sales_This_Quarter'];
56      String reportId = (String)reportList.get(0).get('Id');
57      
58      Reports.ReportMetadata reportMetadata =
59          Reports.ReportManager.describeReport(reportId).getReportMetadata();
60      
61      // Add a filter.
62      List<Reports.ReportFilter> filters = new List<Reports.ReportFilter>(); 
63      Reports.ReportFilter newFilter = new Reports.ReportFilter();
64      newFilter.setColumn('OPPORTUNITY_NAME');
65      newFilter.setOperator('equals');
66      newFilter.setValue('ApexTestOpp');
67      filters.add(newFilter);
68      reportMetadata.setReportFilters(filters);
69      
70      Reports.ReportResults result =
71          Reports.ReportManager.runReport(reportId,reportMetadata,false); 
72      Reports.ReportFact grandTotal = (Reports.ReportFact)result.getFactMap().get('T!T');
73      System.assertEquals(1,(Decimal)grandTotal.getAggregates().get(1).getValue());
74    }
75}