独立测试文件 - 为了简介起见

为什么要进行单元测试

单元测试是开发过程中的关键部分。它们帮助确保代码按预期运行,并且代码的更改不会破坏现有功能。

特别是在智能合约领域,错误可能会非常昂贵(涉及数百万美元!),单元测试是必须的。通常,建议开发人员编写覆盖以下内容的测试:

  • 正常路径:覆盖代码预期行为的测试。
  • 边缘情况:覆盖代码意外行为的测试,特别是导致错误的情况。
  • 端到端测试(E2E):覆盖代码全流程的测试,包括与其他模块和区块链的交互。

除了单元测试,开发人员还可以编写集成测试,这些测试可以使用 TypeScript 进行,测试包括本地运行的区块链在内的一切端到端的交互。

Move中的单元测试

Move 中的单元测试被设计为直接在 Move 中编写。这允许与语言的深度集成,并能够测试 Move 代码的全部范围。Move 单元测试可以在与被测试模块相同的文件中编写。然而,建议在单独的文件中编写测试,以保持模块文件的简洁,专注于模块的实现。这也减少了为测试逻辑添加 #[test_only] 注释的数量。我们将在本课程的后续课程中对此进行更多讨论。Move 源代码目录的结构如下:

sources/
  module1.move
  module2.move
  module3.move
tests/
  module1_tests.move
  module2_tests.move
  module3_tests.move
Move.toml

每个模块的测试应有一个单独的文件。文件名应为模块名后加 _tests.move。例如,如果模块名为 my_module,测试文件应命名为 my_module_tests.move

每个测试模块如下所示:

#[test_only]
module my_package::my_module_tests {
}

#[test_only] 注释确保此模块在发布包时不会被部署。