【发布时间】:2016-02-15 10:56:15
【问题描述】:
当使用静态变量来确保触发器只触发一次时,我们注意到测试类中有一些有趣的行为。考虑以下触发器、类和测试类:
触发器:
trigger RecursiveTrigger on Account (before insert) {
if(RecursiveClass.RunOnce) {
RecursiveClass.RunOnce = false;
if(Trigger.isInsert) {
RecursiveClass.doStuffOnInsert();
}
if(Trigger.isUpdate) {
RecursiveClass.doStuffOnUpdate();
}
}
}
类:
public class RecursiveClass {
public static boolean RunOnce = true;
public static void doStuffOnInsert() {}
public static void doStuffOnUpdate() {}
}
测试类:
@IsTest(SeeAllData=false)
public class TestRecursiveClass {
static testMethod void testAccountInsertUpdate() {
Account a = new Account(Name = 'Testing Recursive');
insert a;
a.Name = 'Testing Update';
update a;
}
}
基于此,我期望 100% 的代码覆盖率,但是当您运行此行时,RecursiveClass.doStuffOnUpdate();在触发器中不会执行,因为静态变量似乎仍然被设置。根据我在文档中阅读的内容,静态变量仅在整个事务中保存(即插入或更新)。测试类中的更新不会是全新的事务还是我误解了这一点?
我能够解决这个问题的唯一方法是将静态变量分为一个用于插入和一个用于更新。
【问题讨论】:
标签: variables static salesforce apex