课程章节介绍
你知道吗,在写测试代码时,经常会遇到一个很烦人的限制:
如果你在一个事务里先做了数据操作,比如插入、更新记录,这些操作会让系统产生“未提交的工作”。接着如果你马上要发起一个 HTTP 调用,系统就会报错——因为它不允许在有未提交工作的情况下进行调用。
那怎么绕过这个限制呢?
答案就是,用好 Test.startTest 和 Test.stopTest 这两个老朋友,。
具体做法是:
- 把你要,模拟的调用,(就是被测代码里的呼叫外部系统那部分)放在 `Test.startTest` 和 `Test.stopTest` 之间。
- 那些,会产生未提交工作的事务性操作,,必须写在 `Test.startTest` ,之前,,不能放在这个块里。
- 而且别忘了,`Test.setMock` 语句要写在 `Test.startTest` 的,前面,,顺序不能错。
为什么这样就能工作呢?
因为 `Test.startTest` 会把之前所有挂起的操作提交掉,并开启一个全新的测试上下文,这样后面的调用就没有未提交工作的阻碍了。
还有一点可以放心:
调用完成之后,如果再发生事务操作,是允许的,不需要做任何调整,系统不会管你。
简单总结就是:,先办事(DML),再开块(start/stop),模拟调用放中间,setMock 放最前。,
这样你的测试就能顺畅运行啦。
关键词
Apex
Salesforce
Developer Guide