【Salesforce】テストコードカバー率の一覧
SalesforceでApexコードを書いていると、テストメソッドを通す必要がありますね。
とある環境でテストメソッドが処理用のクラスに記述されていたため、新しくテストクラスを作成してそちらにテストメソッドを移動させる作業がありました。
その際に、すべてのクラスのコードカバー率を確認したかったのですが、そのようなページは見つけられませんでした。
開発者コンソールでやクラス画面で確認するにしても、クラスの数が多いので少し面倒です。
そこで、何とかして一覧を取得できないか調べてみました。
SOQLを使用することで、カバレッジに関するオブジェクトを取得できるとのこと。
実際に開発者コンソールのQueryEditorで実行してみました。
SELECT ApexClassOrTrigger.Name, NumLinesCovered, NumLinesUncovered FROM ApexCodeCoverageAggregate
しかし、実行することはできませんでした。
サポートされていないオブジェクトのようです。
sObject type 'ApexCodeCoverageAggregate' is not supported.
こちらも調べてみると、REST APIでサポートしているようなことが書いてあります。
開発者コンソールから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】テストコードカバー率の一覧"