3

私の本番環境には、かなりの数のトリガーとクラスがあります。これらはすべてうまく機能し、正常に機能しています。ただし、テストクラスが将来のメソッドを呼び出しすぎているため、いくつかの新しいトリガーをデプロイできません。実行ごとに1回だけfutureメソッドを呼び出すように、コードがバルク化されていることを保証します。ただし、トリガーがIDEを介してデプロイされている場合、すべてのテストが実行され、その結果、将来の呼び出しが何度も実行されます。

制限に達した場合にcatchメソッドにルーティングされることを期待して、今後のすべての呼び出しの周りにtry/catchを配置してみました。同じエラーが発生しますが、それでも展開は失敗します。

私が行っている主な将来の呼び出しは、1つのクラスを通じてのみ参照可能です。これは、私のWebサイトにpingを送信するHTTP呼び出しです。

すべてのテストクラスを完全にやり直す以外に、この制限を回避する方法はありますか?以下に示すように、過剰な将来の呼び出しは(default)、特定のトリガーではなく、発生しています。

10:39:15.617|LIMIT_USAGE_FOR_NS|(default)|
Number of SOQL queries: 85 out of 100 ******* CLOSE TO LIMIT
Number of query rows: 1474 out of 50000
Number of SOSL queries: 0 out of 20
Number of DML statements: 19 out of 150
Number of DML rows: 23 out of 10000
Number of script statements: 2370 out of 200000
Maximum heap size: 0 out of 6000000
Number of callouts: 0 out of 10
Number of Email Invocations: 0 out of 10
Number of fields describes: 0 out of 100
Number of record type describes: 0 out of 100
Number of child relationships describes: 0 out of 100
Number of picklist describes: 0 out of 100
Number of future calls: 11 out of 10 ******* CLOSE TO LIMIT
4

1 に答える 1

2

特定のコードを見ずに、テスト中に将来の呼び出し制限に到達する原因となっているパスを特定することは困難です。現在の展開のコンポーネントが将来のメソッド制限に達している理由を調査する価値があります。

テストに合格することが目的の場合は、Test.isRunningTest()Limits.getFutureCalls()、およびLimits.getLimitFutureCalls( )を組み合わせて使用​​し、テスト中に将来のメソッドが呼び出されないようにすることができます。超過する制限。

例えば

 if(Test.isRunningTest() && Limits.getFutureCalls() >= Limits.getLimitFutureCalls()) {
     system.debug(LoggingLevel.Error, 'Future method limit reached. Skipping...');
 } else {
     callTheFutureMethod();
 }
于 2012-10-29T20:30:49.363 に答える