课程章节介绍
同学们,今天咱们来聊一个在写测试代码时特别实用的小工具——`@TestVisible` 注解。
你们可能已经发现了,在 Salesforce 里写单元测试,测试方法必须放在用 `@isTest` 标记的单独测试类里,不能和被测试的业务类混在一起。这样做的好处是代码结构清晰,但在升级旧代码时会碰到一个小麻烦:如果业务类里面有些方法是私有的、或者有些成员变量是私有或受保护的,测试类就访问不到它们了。毕竟测试类是独立的外部类呀。
这时候 `@TestVisible` 就派上用场了。它是一个注解,你可以把它放在私有或受保护的成员前面,比如成员变量、内部类(特别是有构造函数的内部类)、私有方法,甚至是自定义的私有异常上。标记了 `@TestVisible` 之后,这些原本对外隐藏的成员,就可以在测试方法里被访问到,但要注意,这只是测试上下文里的特权,生产运行的时候它们依然保持原有的访问限制,所以安全性不会丢。
这个功能在升级旧版 API 时尤其救命。举个例子,从 API 28.0 开始,Salesforce 强制要求测试方法必须放在单独的 `@isTest` 类里。假如你手里有个老类,以前把测试方法和业务逻辑写在了一起,现在要升级到新版本,就得把测试抽出去,可那些私有方法怎么测呢?一个一个改成 public 不光麻烦,还可能破坏封装。这时候直接在原类里给需要的私有成员加上 `@TestVisible`,外面的测试类就能顺顺当当调用了,省时又省力。
记住了,`@TestVisible` 能修饰的东西包括:成员变量、内部类(如果内部类有构造函数,那它也能用)、私有方法,还有私有自定义异常。基本上那些隐藏在类深处的、原本测试触不到的角落,用一个注解就能照亮。
好了,关于 `@TestVisible` 我们就讲到这里。下次写测试碰到私有成员访问不了的问题,先别急着改访问修饰符,想想这个方便的小工具。
关键词
Apex
Salesforce
Developer Guide