【Salesforce】テストコードカバー率の一覧

【Salesforce】テストコードカバー率の一覧

SalesforceでApexコードを書いていると、テストメソッドを通す必要がありますね。

とある環境でテストメソッドが処理用のクラスに記述されていたため、新しくテストクラスを作成してそちらにテストメソッドを移動させる作業がありました。

その際に、すべてのクラスのコードカバー率を確認したかったのですが、そのようなページは見つけられませんでした。

開発者コンソールでやクラス画面で確認するにしても、クラスの数が多いので少し面倒です。

そこで、何とかして一覧を取得できないか調べてみました。

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_code_coverage_intro.htm

SOQLを使用することで、カバレッジに関するオブジェクトを取得できるとのこと。

実際に開発者コンソールのQueryEditorで実行してみました。

SELECT ApexClassOrTrigger.Name, NumLinesCovered, NumLinesUncovered FROM ApexCodeCoverageAggregate

しかし、実行することはできませんでした。

サポートされていないオブジェクトのようです。

sObject type 'ApexCodeCoverageAggregate' is not supported.

こちらも調べてみると、REST APIでサポートしているようなことが書いてあります。

https://developer.salesforce.com/docs/atlas.en-us.api_tooling.meta/api_tooling/tooling_api_objects_apexcodecoverageaggregate.htm

開発者コンソールからHttpRequestで呼び出していますね。

https://developer.salesforce.com/forums/?id=906F0000000AYiHIAW

http://blog.adityanaag.com/23/Export+Apex+Code+Coverage+to+Excel

真似してみました。

HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID());
req.setHeader('Content-Type', 'application/json');
req.setEndpoint(URL.getSalesforceBaseURL().toExternalForm()+'/services/data/v33.0/tooling/query/?q=Select+id,ApexClassorTrigger.Name,NumLinesCovered,NumLinesUncovered+from+ApexCodeCoverageAggregate');
req.setMethod('GET');
Http h = new Http();
HttpResponse res = h.send(req);
system.debug('【Res】' + res.getBody());

リモートサイトの設定を忘れていました。

Line: 7, Column: 1
System.CalloutException: Unauthorized endpoint, please check Setup->Security->Remote site settings. endpoint = https://na14.salesforce.com/services/data/v33.0/tooling/query/?q=Select+id,ApexClassorTrigger.Name,NumLinesCovered,NumLinesUncovered+from+ApexCodeCoverageAggregate

リモートサイトの設定を設定をし直して、もう一度実行すると、JSONが返ってきました。

こちらは長いので省略です。

実際にはカバー率が返ってきたわけではなく、クラスごとにカバーされた行数とされていない行数がわかります。

合計して除算することで、開発者コンソールで表示されているものと同じカバー率を取得することができました。

One Response to "【Salesforce】テストコードカバー率の一覧"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です