我的测试类在apex force.com代码中出了什么问题?

时间:2012-07-05 14:13:58

标签: salesforce apex-code

我在Apex写过一个工人阶级。它是一个电子邮件服务扩展程序,用于处理传入的电子邮件。 它在我的沙箱环境中工作得很好。

我已经创建了一个测试类,所以我也可以将它部署到我的生产中,但是在验证代码时,我得到的代码中只有72%经过了测试。

这是我的主要课程

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块中的所有行。 (在代码中标明)。

3 个答案:

答案 0 :(得分:1)

在您的测试方法中,您正在设置envelope.toAddress,但在您的电子邮件服务中,您将实际的InboundEmail对象的第一个元素拆分为地址。这可能会导致ArrayIndexOutOfBoundsException或NPE,因为元素0不存在。因此代码覆盖率会很差,因为您的测试总是会跳转到异常处理中,而其余的代码会被覆盖。只需将电子邮件设置为地址,您就可以获得更好的覆盖率。 h9nry

答案 1 :(得分:0)

在您的测试代码中,您是否可以添加导致潜在客户插入失败的方案?这将导致catch块中的代码执行并为您提供所需的代码测试覆盖率。

答案 2 :(得分:0)

默认情况下,email.fromAddress不是列表,因此只需将其设置为字符串而不是列表即可解决此问题。