如何解决Salesforce 中 Apex 触发器测试中的必填字段缺失错误
我的 apex 代码测试失败,出现以下错误:
“System.DmlException:插入失败。第 0 行的第一个异常;第一个错误:REQUIRED_FIELD_MISSING,缺少必填字段:[Opportunity__c]:[Opportunity__c] 堆栈跟踪:Class.Integromat_GetAuroraArrayInfoTest.testTrigger:第 68 行,第 1 列“
Arrays_from_Aurora__c 是与机会的子关系。 Opportunity__c 既作为机会字段存在,也作为 Arrays_from_Aurora__c 字段存在。
我该如何解决这个问题?谢谢!
这是我的测试:
@isTest
public class Integromat_GetAuroraArrayInfoTest {
static SObject mock(String sobjectName) {
SObjectType t = Schema.getGlobalDescribe().get(sobjectName);
SObject o = t.newSobject();
Map<String,Schema.SObjectField> m = t.getDescribe().fields.getMap();
for (String fieldName : m.keySet()) {
DescribeFieldResult f = m.get(fieldName).getDescribe();
if (!f.isNillable() && f.isCreateable() && !f.isDefaultedOnCreate()) {
if (f.getType() == DisplayType.Boolean) {
o.put(f.getName(),false);
}
else if (f.getType() == DisplayType.Currency) {
o.put(f.getName(),0);
}
else if (f.getType() == DisplayType.Date) {
o.put(f.getName(),Date.today());
}
else if (f.getType() == DisplayType.DateTime) {
o.put(f.getName(),System.now());
}
else if (f.getType() == DisplayType.Double) {
o.put(f.getName(),0.0);
}
else if (f.getType() == DisplayType.Email) {
o.put(f.getName(),'foo@foo.com');
}
else if (f.getType() == DisplayType.Integer) {
o.put(f.getName(),0);
}
else if (f.getType() == DisplayType.Percent) {
o.put(f.getName(),0);
}
else if (f.getType() == DisplayType.Phone) {
o.put(f.getName(),'555-555-1212');
}
else if (f.getType() == DisplayType.String) {
o.put(f.getName(),'TEST');
}
else if (f.getType() == DisplayType.TextArea) {
o.put(f.getName(),'TEST');
}
else if (f.getType() == DisplayType.Time) {
o.put(f.getName(),System.now().time());
}
else if (f.getType() == DisplayType.URL) {
o.put(f.getName(),'http://example.com');
}
else if (f.getType() == DisplayType.PickList) {
o.put(f.getName(),f.getPicklistValues()[0].getValue());
}
}
}
return o;
}
@isTest static void testTrigger() {
SObject o = mock('Arrays_from_Aurora__c');
Test.startTest();
insert o;
update o;
delete o;
Test.stopTest();
System.assertEquals(200,Webhook.response.getStatusCode());
}}
解决方法
错误消息准确地告诉您出了什么问题。对象 Opportunity__c
上有一个名为 Arrays_from_Aurora__c
的必填字段,您的代码没有填充它。
您使用的数据模拟框架根本不填充关系字段。出于这个原因,它不适用于大多数 Salesforce 数据模型。您需要手动构建所需的所有数据,或者使用更复杂的模拟框架来构建记录之间的关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。