学习目的
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();
}
}
如果有错,请及时支持。一起学习,一起进步!