Salesforce apex force.com代码中的测试类有什么问题?
我在Apex写了一个工人阶级。它是一个电子邮件服务扩展器,用于处理传入的电子邮件。 它在我的沙箱环境中工作得非常好 我已经创建了一个测试类,所以我也可以将它部署到我的产品中,但是在验证代码时,我得到的结果是,只有72%的代码被测试 这是我的主课Salesforce apex force.com代码中的测试类有什么问题?,salesforce,apex-code,Salesforce,Apex Code,我在Apex写了一个工人阶级。它是一个电子邮件服务扩展器,用于处理传入的电子邮件。 它在我的沙箱环境中工作得非常好 我已经创建了一个测试类,所以我也可以将它部署到我的产品中,但是在验证代码时,我得到的结果是,只有72%的代码被测试 这是我的主课 global class inboundEmail implements Messaging.InboundEmailHandler { global Messaging.InboundEmailResult handleInboundEmail(Me
global class inboundEmail implements Messaging.InboundEmailHandler {
global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email, Messaging.InboundEnvelope envelope) {
Messaging.InboundEmailResult result = new Messaging.InboundEmailresult();
Lead lead;
String [] mFromUserParams;
String [] sourceText;
String mCaseObject;
try{
sourceText = email.toAddresses[0].split('@');
String [] mParams = sourceText[0].split('\\.');
**// FROM THIS LINE TO THE END - NOT COVERED**
mFromUserParams = email.fromAddress.split('@');
mCaseObject = mParams[0];
if (mCaseObject == 'lead'){
lead = new Lead();
lead.LastName = mFromUserParams[0];
lead.Company = email.fromAddress;
lead.OwnerId = mParams[1];
lead.LeadSource = mParams[2];
lead.Email = email.fromAddress;
lead.RequirementsDescription__c = email.subject + email.plainTextBody;
insert lead;
result.success = true;
} else if (mCaseObject == 'case'){
result.success = true;
} else {
result.success = false;
}
}catch(Exception e){
result.success = false;
result.message = 'Oops, I failed.';
}
return result;
}
}
这是我的测试课
@isTest
private class inboundEmailTest {
public static testMethod void inboundEmail(){
// Create a new email, envelope object and Header
Messaging.InboundEmail email = new Messaging.InboundEmail();
Messaging.InboundEnvelope envelope = new Messaging.InboundEnvelope();
envelope.toAddress = 'lead.owner.new@cpeneac.cl.apex.sandbox.salesforce.com';
envelope.fromAddress = 'user@acme.com';
email.subject = 'Please contact me';
email.fromName = 'Test From Name';
email.plainTextBody = 'Hello, this a test email body. for testing Bye';
// setup controller object
inboundEmail catcher = new inboundEmail();
Messaging.InboundEmailResult result = catcher.handleInboundEmail(email, envelope);
}
}
根据错误消息,第3行的Try/Catch块中的所有行均未覆盖。(在代码中标记)。在测试代码中,能否添加导致潜在客户插入失败的场景?这将导致catch块中的代码执行,并为您提供所需的代码测试覆盖率。在测试方法中,您将envelope.toAddress设置为Address,但在电子邮件服务中,您将实际InboundEmail对象的第一个元素拆分为Address。这可能会导致ArrayIndexOutOfBoundsException或NPE,因为元素0不存在。因此,代码覆盖率将很低,因为您的测试总是跳入异常处理,而剩下的代码则没有覆盖。只需将电子邮件设置为地址,您就应该有更好的覆盖范围。
h9nry默认情况下,email.fromAddress不是一个列表,所以只需将其设置为字符串而不是列表即可解决此问题。是的,我也这么认为,但信封不必设置为Addresses[]对象。仅作为单个字符串对象。您不需要信封对象,只需设置
email.toaddress=new List{'lead.owner即可。new@cpeneac.cl.apex.sandbox.salesforce.com'};代码>我发现我使用inboundEmail作为类名,但inboundEmail是一个内部对象。也许是误会了。从email.fromAddress中删除列表也解决了这个问题。谢谢