如何避免在测试期间收到“太多未来的电话”?

时间:2012-10-29 19:23:38

标签: testing salesforce apex-code

我的生产环境现在有很多触发器和类。这些都很有效,并且正常运作。但是,我无法部署一些新的触发器,因为测试类调用了太多的未来方法。我向您保证,我的代码已批量化,以便每次运行只调用一次future方法。但是,当通过IDE部署触发器时,每个测试都会运行,因此未来的调用将运行太多次。

我已尝试在未来的所有调用中放置一个try / catch,希望如果它确实达到了限制,它只会路由到catch方法。尽管存在相同的错误,它仍然无法部署。

我正在制作的主要未来电话只能通过一个班级进行参考。这是一个HTTP调用,它会ping我的网站。

是否有任何方法可以避免此限制,而不是完全重新执行所有测试类?正如您在下面所看到的,未来的超额呼叫将在(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

1 个答案:

答案 0 :(得分:2)

在不查看特定代码的情况下,很难说出哪些路径会导致您在测试期间达到未来的呼叫限制。值得探讨为什么当前部署中的组件达到了未来的方法限制。

如果您的目标是让测试通过,您可以使用Test.isRunningTest()Limits.getFutureCalls()Limits.getLimitFutureCalls()的组合,以便在测试期间不会调用未来的方法否则他们会超出限额。

E.g。

 if(Test.isRunningTest() && Limits.getFutureCalls() >= Limits.getLimitFutureCalls()) {
     system.debug(LoggingLevel.Error, 'Future method limit reached. Skipping...');
 } else {
     callTheFutureMethod();
 }