今天,我们将重点关注 Solana 开发的一个重要方面:测试你的链上程序。测试是开发过程中至关重要的一部分,它可以确保你的程序在 Solana 提供的快节奏和高性能环境中平稳、安全和高效地运行。对于本文,我们将重点介绍两种基本类型的测试:单元测试、集成测试和 E2E 测试。我们将把更多面向安全的测试(如 fuzzing 和 invariants)留到另一篇文章中。
Solana 中的单元测试非常简单,主要涉及执行 Rust 单元测试。这种方法非常适合验证程序的各个组件,例如数学公式。有效单元测试的一个关键策略是以隔离这些操作的方式设计或重构你的程序。通过将数学运算封装在单独的函数中,你可以轻松地独立于程序的主要逻辑来测试它们,从而确保准确性并简化调试。
例如,考虑 Orca Whirlpools 存储库,它演示了如何有效地单元测试数学运算。通过将 swap 数学逻辑分离到其自己的函数中,测试仅侧重于这些计算的正确性,而不受其他程序元素的干扰。你可以在 swap_math.rs 文件中看到他们是如何实现这一点的。
Solana 中的集成测试主要有两种类型:
在进行使用本地测试验证器的集成测试时,有两个框架脱颖而出:Anchor 的 TypeScript 测试框架和 Trident。
Anchor TypeScript 测试框架是 Solana 集成测试中最受欢迎和使用最广泛的工具。它的受欢迎程度归因于其广泛的文档和大量示例,使其易于上手并找到支持。许多 Solana 程序都依赖它来满足其测试需求。
优点:
缺点:
有关使用 Anchor TypeScript 测试进行测试的更多示例,请查看 Helius 的这篇 精彩文章。
Trident 是一个较新的框架,允许你用 Rust 编写测试,同时它会处理启动本地验证器。对于那些喜欢 Rust 并希望获得更顺畅的集成测试体验的人来说,此设置可能非常有益。
优点:
缺点:
尽管存在这些限制,Trident 仍显示出巨大的潜力,并且值得关注其发展。示例可以在项目 GitHub 存储库中找到。
使用本地测试验证器的主要缺点之一是难以模拟帐户和区块链状态。虽然可以创建具有内置帐户和程序的自定义 genesis 以在你的测试环境中使用,但与本文后面介绍的方法相比,此方法受到限制。你可以从主网克隆程序和帐户,但模拟属于某些程序的特定帐户更具挑战性。如果你的程序与其他程序集成,则可能难以很好地测试该集成。
另一个重要问题是无法轻松影响验证器状态。例如,修改块时间以测试与经过时间相关的行为,使用这种方法并不简单。此限制使得难以模拟某些条件并彻底测试程序的所有方面。
值得一提的是,这两种测试框架都与 Anchor 框架无缝集成,但在使用本机 Solana 程序时会遇到挑战。
直接与 Solana 的 Bank 或 Solana 虚拟机 (SVM) 交互是使用本地测试验证器的更快替代方案。这种方法抽象掉了不必要的层,仅关注 bank 或 SVM 的执行,而无需集群逻辑。因此,测试运行速度更快,并且可以并行执行,从而提高效率并缩短开发时间。
官方 Solana 测试套件提供了一个强大的框架,用于测试 Solana 程序,可以直接控制 bank,包括块时间操作和其他参数。
优点:
缺点:
精彩的示例可以在 Solana 程序库中找到 - 例如,Token 程序的测试。
Litesvm 是一个快速轻量级的库,专为测试 Solana 程序而设计。它创建了一个针对开发人员优化的进程内 Solana VM,与 solana-program-test 和 solana-test-validator 等替代方案相比,显着加快了测试和编译过程。它还具有符合人体工程学的 API,具有合理的默认值和广泛的可配置性。
优点:
缺点:
示例可以在 官方 repo 中找到, 还可以查看 anchor 文档
Mollusk 是另一种工具,它通过使用 BPF Loader 直接调用可执行程序来为 Solana 程序提供测试工具。这绕过了事务清理和运行时检查,纯粹专注于指令处理。
优点:
缺点:
总的来说,直接与 Solana 的 Bank 或 SVM 交互提供了一个更简化和更快的测试过程。虽然这些方法有其自身的挑战,例如管理依赖项或处理更少的示例,但它们在速度、效率以及能够更好地控制测试环境(如创建模拟帐户或修改时间等测试条件)方面提供了显着的优势。
目前,我们有各种可用于测试 Solana 程序的工具,但实际上,实现全面有效的测试仍然具有挑战性。例如,在 EVM 世界中,Foundry 是一个有据可查且非常受欢迎的工具,可以显着简化测试过程。我们认为 Solana 应该拥有一套类似强大且用户友好的工具套件。虽然有一些有希望的候选者出现,但我们将不得不看看这些工具如何发展以满足 Solana 开发人员社区日益增长的需求。
你最喜欢的测试 Solana 程序的方式是什么?在评论中回复。
感谢你的阅读!要及时了解我们的最新见解、研究和安全提示,请在 X 上关注我们并 访问我们的网站。如果你需要帮助或有任何疑问,请随时与我们联系。
这里是你获取有关 Solana 安全和开发所有信息的首选资源。在这里,我们深入研究 Solana 安全研究,提供细致的代码审查(审计),并分享我们对 Solana 和更广泛的区块链生态系统的见解、研究成果和观察。
原文链接: https://www.placeholder.vc/blog/2025/4/16/combined-metrics-for-tracking-smart-contract-networks 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
登链社区是一个 Web3 开发者社区,通过构建高质量技术内容平台和线下空间,助力开发者成为更好的 Web3 Builder。
登链社区网站 : learnblockchain.cn
开发者技能认证 : decert.me
B 站 : space.bilibili.com/581611011
YouTube : www.youtube.com/@upchain
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。