在我们的托管包上,我们有一个实现InstallHandler接口的 PostInstallClass。我们使用它在以后的版本中添加新字段时填充它们,或者在模型更改时修复数据。
但是,我们很难找到测试这种迁移的方法。例如:我们添加了一个在触发器中使用的新字段。我们想插入一些该字段为空的记录(就像创建字段时一样),但不触发触发器,这将失败。
我们有什么办法可以做这样的事情吗?
在我们的托管包上,我们有一个实现InstallHandler接口的 PostInstallClass。我们使用它在以后的版本中添加新字段时填充它们,或者在模型更改时修复数据。
但是,我们很难找到测试这种迁移的方法。例如:我们添加了一个在触发器中使用的新字段。我们想插入一些该字段为空的记录(就像创建字段时一样),但不触发触发器,这将失败。
我们有什么办法可以做这样的事情吗?
我建议实现一个受保护的自定义设置对象(受保护,因为您不希望您的订阅者能够修改它)。这是你可以禁用你的触发器,例如
trigger <name> on Account (<events>) {
Configuration_Options__c options = Configuration_Options__c.getOrgDefaults();
if(options.Trigger_Enabled__c) {
//perform all the actions in the trigger
}
}
然后在单元测试中你可以控制触发器是否执行它的动作
private static testMethod void testPostInstallClass() {
PostInstallClass postinstall = new PostInstallClass();
Configuration_Options__c options = Configuration_Options__c.getOrgDefaults();
//disable the trigger
options.Trigger_Enabled__c = false;
update options;
//insert your legacy records here
//re-enable the trigger
options.Trigger_Enabled__c = true;
update options;
//run the install script
Test.testInstall(postinstall, null);
}