×
Apex 编程教程Apex 环境Apex 示例Apex 数据类型Apex 变量Apex 字符串Apex 数组Apex 常量Apex 决策Apex 循环Apex 集合Apex 类Apex 类方法Apex 对象Apex 接口Apex DMLApex 数据库方法Apex SOSLApex SOQLApex 安全性Apex 调用Apex 触发器Apex 触发设计模式Governer Limits调节器限制Apex 批量处理Apex 调试Apex 测试Apex 部署Apex 字符串Apex 数组

Apex 测试


测试是Apex或任何其他应用程序开发的集成部分。 在Apex中,我们有单独的测试类来开发所有的单元测试。


测试类

在SFDC中,代码必须具有75%的代码覆盖率才能部署到生产。 此代码覆盖率由测试类执行。 测试类是测试其他Apex类的功能的代码片段。

让我们为我们之前编写的一个代码编写一个测试类。 我们将编写测试类来覆盖我们的Trigger和Helper类代码。 下面是需要覆盖的触发器和帮助类。

//Trigger with Helper Class
trigger Customer_After_Insert on APEX_Customer__c (after update) {
    CustomerTriggerHelper.createInvoiceRecords(Trigger.new, trigger.oldMap);//Trigger calls the helper class and does not have any code in Trigger
}

//Helper Class:
public class CustomerTriggerHelper {
    public static void createInvoiceRecords (List customerList, Map<id, apex_customer__c> oldMapCustomer) {
        List InvoiceList = new List();
        for (APEX_Customer__c objCustomer: customerList) {
            if (objCustomer.APEX_Customer_Status__c == 'Active' && oldMapCustomer.get(objCustomer.id).APEX_Customer_Status__c == 'Inactive') {//condition to check the old value and new value
                APEX_Invoice__c objInvoice = new APEX_Invoice__c();
                objInvoice.APEX_Status__c = 'Pending';
 objInvoice.APEX_Customer__c = objCustomer.id;
                InvoiceList.add(objInvoice);
            }
        }
        insert InvoiceList;//DML to insert the Invoice List in SFDC
    }
}

创建测试类

数据创建

我们需要在测试类本身创建测试类的数据。默认情况下,测试类不能访问组织数据,但是如果您设置@isTest(seeAllData = true),那么它将有权访问组织的数据。


@isTest注释

通过使用此注释,您声明这是一个测试类,它不会被计入组织的总代码限制。


TestMethod关键字

单元测试方法是不带参数,不向数据库提交数据,不发送电子邮件,并在方法定义中使用testMethod关键字或isTest注释声明的方法。此外,测试方法必须在测试类中定义,即用isTest注释的类。

在我们的例子中,我们将看到,'myUnitTest'是我们的测试方法。


Test.startTest()Test.stopTest()

这些是可用于测试类的标准测试方法。这些方法包含我们将模拟我们的测试的事件或动作。就像在这个例子中,我们将测试我们的触发器和帮助类来模拟火灾触发器,通过更新记录,我们已经做了开始和停止块。这也为在开始和停止块中的代码提供单独的调节器限制。


System.assert()

此方法用实际检查所需的输出。在这种情况下,我们期望插入一个发票记录,所以我们添加了assert来检查。


例如:

/**
 * This class contains unit tests for validating the behavior of Apex classes
 * and triggers.
 *
 * Unit tests are class methods that verify whether a particular piece
 * of code is working properly. Unit test methods take no arguments,
 * commit no data to the database, and are flagged with the testMethod
 * keyword in the method definition.
 *
 * All test methods in an organization are executed whenever Apex code is deployed
 * to a production organization to confirm correctness, ensure code
 * coverage, and prevent regressions. All Apex classes are
 * required to have at least 75% code coverage in order to be deployed
 * to a production organization. In addition, all triggers must have some code coverage.
 * 
 * The @isTest class annotation indicates this class only contains test
 * methods. Classes defined with the @isTest annotation do not count against
 * the organization size limit for all Apex scripts.
 *
 * See the Apex Language Reference for more information about Testing and Code Coverage.
 */
@isTest
private class CustomerTriggerTestClass {
    static testMethod void myUnitTest() {
        //Create Data for Customer Objet
        
        APEX_Customer__c objCust = new APEX_Customer__c();
        objCust.Name = 'Test Customer';
        objCust.APEX_Customer_Status__c = 'Inactive';
        insert objCust;
        
        //Now, our trigger will fire on After update event so update the Records
        Test.startTest();//Starts the scope of test
        objCust.APEX_Customer_Status__c  = 'Active';
        update objCust;
        Test.stopTest();//Ends the scope of test
        
        //Now check if it is giving desired results using system.assert Statement.New invoice should be created
        List invList = [SELECT Id, APEX_Customer__c FROM APEX_Invoice__c WHERE APEX_Customer__c = :objCust.id];
        system.assertEquals(1,invList.size());//Check if one record is created in Invoivce sObject
    }
}

运行测试类

按照下面的步骤来运行测试类:


第1步:转到Apex classes =>单击类名称'CustomerTriggerTestClass'


第2步:如图所示,点击运行测试按钮:


CustomerTriggerTestClass


第3步:检查状态


检查状态


第4步:现在检查我们已经写入测试的类和触发器


类:


Class


触发:


Trigger

我们的测试成功并完成。

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)