Apex开发 -- 测试类

学习目的
0,为什么要写测试类
1,测试类的注解
2,测试类里获取Metadate的方式
3,测试类编写技巧
4,Batch Class测试类编写
5,Call Out Class测试类编写

为什么要写测试类

Salesforce有一个机制,就是从沙盒环境部署到生产环境,测试类对业务逻辑代码的覆盖率必须大于等于75%。当然,如果要说还有其他的写测试类的必要,那就是为了做单元测试,规范,规范,规范。

测试类的注解

@isTest : 在每个测试类的类名/方法上要写一个注释,声明这个类是测试类/测试方法

@isTest
private class testClass {
	@isTest
	static void testMethod(){
	}
}

@testSetup:测试数据准备,可以在准备临时的测试数据。在这里面的测试数据可以在测试方法里面使用soql查询出来

 @testSetup
  static void  testMethod() {
  }

测试类里获取Metadate的方式

1,获取Price book

Test.getStandardPricebookId();//获取标准价格手册的Id

2,获得记录类型的Id
因为记录类型属于Metadata类型,可以通过Soql获取

SELECT Id FROM RecordType WHERE DeveloperName =' 记录类型DeveloperName '

可以通过Schema空间的的API获取

Schema.SObjectType.Opportunity.getRecordTypeInfosByName().get('记录类型名').getRecordTypeId();

编写技巧

1,指定用户执行测试类,能够解决记录Owner的问题,解决query 101异常

System.runAs(想要指定的用户) {
	
}

2,异步执行测试类Test.startTest() — Test.stopTest()一个测试方法里面只能使用一次

Test.startTest();
需要测试的方法 //这里面执行,能够把前面使用的资源次数归0。比如query次数等。相当于新的一个事务
Test.stopTest();

3,为了保证每个方法的功能单一性,最好保证每个方法的入参都能用清晰的方式,这样写测试类可以减少很多问题

Batch Class测试类编写

Apex_BatchName  a = new Apex_BatchName  (参数1,参数......);
Database.executeBatch(a);

Call Out Class测试类编写

@isTest
private class xxxxxTest {
    private class RestMock implements HttpCalloutMock {
        public HTTPResponse respond(HTTPRequest req) {
            String fullJson = '{xxxxxxx}';//模拟请求成功返回的Json
            HTTPResponse res = new HTTPResponse();
            res.setHeader('Content-Type', 'text/json');
            res.setBody(fullJson);
            res.setStatusCode(200);
            return res;
        }
    }
    @testSetup
    static void dataPrepare() {
        User usr //新建一个符合测试场景的User,比如指定某个Profile的用户执行
        RecordType oppRecordType = [SELECT Id FROM RecordType WHERE DeveloperName = '' LIMIT 1];//获取记录类型
        System.runAs(usr) {
           
        }
    }
    static testMethod void testmethod() {
        Test.startTest();
        Test.setMock(HttpCalloutMock.class, new RestMock());
        xxxxx类名.方法名
        Test.stopTest();
    }
}

如果有错,请及时支持。一起学习,一起进步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章