No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
レポートのテスト
すべての Apex コードと同様に、Salesforce1 Reporting API via Apex コードにはテストカバー率が必要です。
Reporting Apex メソッドはシステムモードでは実行されず、現在のユーザ (コンテキストユーザまたはログインユーザとも呼ばれる) のコンテキストで実行されます。メソッドは、現在のユーザがアクセス権を持つものすべてにアクセスできます。
Apex テストの場合、SeeAllData アノテーションは、true と false のどちらに設定されていても、レポートの実行で必ず無視されます。つまり、レポート結果には、テストで作成されていない既存のデータが含まれます。レポート実行で SeeAllData アノテーションを無効にする方法はありません。結果を制限するには、レポートで検索条件を使用します。
レポートのテストクラスの作成
次の例では、非同期および同期レポートをテストします。各メソッドでは、次の処理を行います。
- 新しい Opportunity オブジェクトを作成し、そのオブジェクトを使用してレポートに検索条件を設定する。
- レポートを実行する。
- アサーションをコールしてデータを検証する。
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}