Build a Mocking Framework with the Stub API

DEX455 - Apex 测试完全指南:单元测试、代码覆盖与 Mock 框架

📄 第 458 页 🎬 视频课程

课程章节介绍

同学们,咱们今天来聊一个很实用的功能,叫Stub API,它是Apex里用来做模拟测试的框架。 简单来说,你写测试类的时候,经常需要依赖一些外部服务或者复杂对象,对吧?比如调用一个Web服务,或者某个类的方法特别重,每次测都要跑很多逻辑,又慢又容易出错。这时候我们就可以“模拟”这些依赖,假装调用它们,直接返回你想要的结果,让测试只关注自己这部分逻辑——这就叫隔离测试。 Stub API就是Salesforce提供的一种官方办法,帮你在测试里生成一个“替身”对象。它的妙处在于,这个替身不是一个需要你提前写好、打包的测试类,而是在运行时自动生成的一个匿名子类。也就是说,你不需要为了测试专门去创建和维护一堆假的类,直接用代码描述行为就行了。 那具体怎么用呢?很简单,两步走: 第一步,创建一个类,去实现System.StubProvider接口。这个接口里只有一个方法,叫handleMethodCall。这个方法就是替身的“大脑”,每次你调用替身对象的某个方法时,它都会被触发。你可以在里面写逻辑:根据调用的方法名、参数,返回一个你提前设计好的假数据。这样你就完全控制了替身的行为。 第二步,用Test.createStub()这个方法,把你要模拟的原始类的类型,和你刚写好的那个StubProvider实例传进去,它就会返回给你一个替身对象。然后你就可以在测试里用这个替身,当作真实对象去调用方法了。 不过,它也有些限制,不是万能的。你现在记住几个不能模拟的情况:静态方法、私有的方法和属性、触发器、内部类、系统类型(比如标准对象的一些底层类)、可批量的类,还有那些只有私有构造函数的类,这些都模拟不了。所以遇到这些场景,你就得想其他办法,比如用依赖注入换种设计,或者考虑别的手动模拟方式。 总之,Stub API是个轻量、灵活的工具,能帮你把测试变得更快、更可靠,而且代码干净。下次写测试遇到烦人的依赖,记得试试它。

关键词

Apex Salesforce Developer Guide