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

Newer Version Available

This content describes an older version of this product. View Latest

レポートのテスト

すべての 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}