startTest和stopTest的使用

在Apex的Test类中,有startTest和stopTest两个函数。这两个函数经常配对使用。

每个单元测试函数都只能调用它们一次。

  • startTest函数标明了测试的开始。在使用它之前,测试数据应该已经建立完成。
  • stopTest函数标明了测试的结束。所有在startTest和stopTest之间调用的异步函数都会同步执行。所以在stopTest之后可以使用assert语句来检查异步函数的执行结果。

在startTest和stopTest之间,代码中的限制(Apex Governor Limits)将会进行新的计算。直到stopTest被调用,Apex的Governor Limits会从startTest被调用之前继续计算。

比如:在Salesforce中函数的SOQL调用限制是100。如果在startTest之前已经执行了99条SOQL,在startTest调用之后,还可以执行100条SOQL。当stopTest被调用后,便只能再执行1条SOQL了。

isRunningTest()

isRunningTest()方法存在于Apex的Test类中,可以在代码中用于检测当前执行的代码是否是单元测试。

语法

if (Test.isRunningTest()) {
// do something
}

使用情况举例

  1. 在为单元测试创建测试数据时,如果系统中已经有了很多相关的触发器(trigger),而此单元测试并不是为了测试它们,那么这些触发器也仍然会被执行。执行过多的触发器一方面会降低系统效率,另一方面也可能引发其他的错误。为了避免这些问题,可以在触发器类中使用isRunningTest()函数来跳过某些逻辑的执行。

  2. 在Visualforce的标准控制器扩展中,可以使用addFields()函数来读取更多的字段。但是当创建单元测试时,addFields()的执行会导致测试出错。这时就要在执行addFields()前用isRunningTest()检测当前的执行是否是单元测试。

    比如:

public ExtensionExample(ApexPages.StandardController controller)
{
List<String> fields = new List<String> {'Custom_field1__c', 'Custom_field2__c'}; // 当进行单元测试时,跳过addFields()的执行
if (!Test.isRunningTest()) {
controller.addFields(fields);
} // 为了增加代码测试的覆盖率,也可以将上面的代码写成一行,这样就可以全部覆盖了
// if (!Test.isRunningTest()) controller.addFields(fields); record = (Account)controller.getRecord(); ...
}

Apex 单元测试辅助函数简介的更多相关文章

  1. Apex单元测试

    单元测试类 Salesforce中为Apex语言提供了完整的单元测试流程,包括单元测试类.测试的运行和结果分析等. 单元测试类是一种特殊的Apex类,基本语法和普通的Apex类一样. 单元测试类的结构 ...

  2. 廖雪峰Java8JUnit单元测试-1JUnit简介-1JUnit测试

    测试驱动开发(Test Driver Development) 1.使用main()方法测试的缺点: 只能有1个main()方法,不能把测试代码分离 没有打印出测试结果和期望结果,例如expected ...

  3. Mocha 单元测试框架简介

    前言: mocha是JavaScript的一种单元测试框架,既可以在浏览器环境下运行,也可以在Node.js环境下运行. 使用mocha,我们就只需要专注于编写单元测试本身,然后,让mocha去自动运 ...

  4. Apex 的 API 简介

    Salesforce 数据API分类 Salesforce中提供了四种数据API接口.数据API接口为开发者提供了操作Salesforce数据的能力.它们分别是: REST API:依据RESTful ...

  5. TDD学习笔记【二】---单元测试简介

    大纲 Testing 的第一个切入点:单元测试. 本篇文章将针对单元测试进行简介,主要内容包含了5W: Why What Where Who When 而How 的部分,属于实现部分,将于下一篇文章介 ...

  6. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  7. JUnit单元测试教程(翻译自Java Code Geeks)

    JUnit单元测试教程--终极指南 JUnit单元测试教程终极指南 说明 单元测试简介 1 什么是单元测试 2 测试覆盖 3 Java中的单元测试 JUnit简介 1 使用Eclipse实现简单JUn ...

  8. Python3+Selenium2完整的自动化测试实现之旅(六):Python单元测试模块Unittest运用

    一.Unittest单元测试框架简介 Unitest是Python下的一个单元测试模块,是Python标准库模块之一,安装完Python后就可以直接import该模块,能在单元测试下编写具体的测试用例 ...

  9. java单元测试

    单元测试 1.简介 在日常开发中,我们编写的任何代码都需要经过严谨的测试才可以发布.以往的测试方法都是通过编写一个main函数进行简单的测试,并使用大量的print语句输出结果,这种方法其实是不可取的 ...

随机推荐

  1. [Java]LeetCode237. 删除链表中的节点 | Delete Node in a Linked List

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  2. [Swift]LeetCode273. 整数转换英文表示 | Integer to English Words

    Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...

  3. [Swift]LeetCode515. 在每个树行中找最大值 | Find Largest Value in Each Tree Row

    You need to find the largest value in each row of a binary tree. Example: Input: 1 / \ 3 2 / \ \ 5 3 ...

  4. [Swift]LeetCode924.尽量减少恶意软件的传播 | Minimize Malware Spread

    In a network of nodes, each node i is directly connected to another node j if and only if graph[i][j ...

  5. 机器学习基石笔记:Homework #1 PLA&PA相关习题

    原文地址:http://www.jianshu.com/p/5b4a64874650 问题描述 程序实现 # coding: utf-8 import numpy as np import matpl ...

  6. MySQL casting from decimal to string(mysql decimal 转 varchar)

    今天群里一个哥们问我mysql怎么将decimal转成varchar,经过查阅资料发现,mysql好像不能将decimal直接转换成varchar,但是可以转成char,原文链接:http://sta ...

  7. 【Scala篇】--Scala中集合数组,list,set,map,元祖

    一.前述 Scala在常用的集合的类别有数组,List,Set,Map,元祖. 二.具体实现 数组   1.创建数组 new Array[Int](10) 赋值:arr(0) = xxx Array[ ...

  8. Can't connect to X11 window server using ':1.0' as the value of the DISPLAY variable.

    安装oracle数据时需要用到图形界面安装,当我们用root用户登录后切换到oracle用户时运行./runInstaller提示报错: Can't connect to X11 window ser ...

  9. Android Studio代码行数统计插件Statistics

    Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址: ...

  10. 『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件

    代码: using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DemoWebControl ...