#单元测试 #测试框架 #无栈 #运行 #运行器 #解释器 #字节码

已删除 mv-unit-test

Move代码的单元测试框架

0.3.2 2022年8月23日
0.3.1 2022年8月13日
0.2.1 2022年7月22日
0.1.6 2022年7月5日
0.1.4 2022年5月23日

#10 in #无栈

Download history 1/week @ 2024-04-14 7/week @ 2024-04-21 7/week @ 2024-04-28 1/week @ 2024-05-05 3/week @ 2024-05-12 13/week @ 2024-05-19 1/week @ 2024-05-26 5/week @ 2024-06-02 4/week @ 2024-06-09 18/week @ 2024-06-16 5/week @ 2024-06-23 63/week @ 2024-07-28

63 每月下载次数
用于 113 个crate(4直接)

Apache-2.0

1.5MB
29K SLoC


id: move-unit-test title: Move单元测试框架 custom_edit_url: https://github.com/move-language/move/edit/main/language/tools/move-unit-test/README.md

摘要

此crate定义了运行和报告Move单元测试的核心逻辑。Move单元测试由两个主要组件组成;一个测试运行器和测试报告器。

还应注意,单元测试可以使用无栈字节码解释器运行。如果使用无栈字节码解释器运行单元测试,并且测试返回一个值,那么将比较使用Move VM执行单元测试的结果和解释器的结果,如果不相等则将引发错误。

有关如何作为Move用户使用单元测试的详细信息,请参阅此处

测试运行器

测试运行器接受一个TestPlan:这是一个由Move编译器根据源#[test]属性构建的数据结构。从高层次来看,此测试计划由以下内容组成

  1. 每个非依赖模块的ModuleTestPlan列表。一个ModuleTestPlan由模块中声明的单元测试列表、其参数以及单元测试是否是预期失败组成。
  2. 每个源模块的编译模块,以及所有传递依赖的编译模块。
  3. 每个源和传递依赖的源文本和源映射。

测试运行器接收这个TestPlan以及各种配置选项(例如,线程数)。根据这些信息,测试运行器创建一个初始测试状态,该状态仅包含上面(2)中提到的模块。这将是所有单元测试相同的初始状态。

构建此初始状态后,将一个由ModuleTestPlan组成的任务队列传递给rayon线程池以执行。在执行每个测试后,一旦测试结果已知,就会向写入器(通常是std::io::stdout)报告PASSFAILTIMEOUT。在ModuleTestPlan中运行测试的结果是失败和通过测试的映射(其中失败表示测试在预期失败时失败,反之亦然),以及相关的性能信息和失败信息(如果适用)。这些每个模块的测试统计信息并行组合,生成一个TestResults数据结构。

测试报告器

在运行所有单元测试并创建一个TestResults数据结构后,测试报告器将遍历测试结果,并使用TestFailure信息中的数据,以及测试计划中的源映射和源文本来显示任何失败测试的源级错误消息。

根据传递给单元测试框架的选项,在测试运行结束后,可能会显示额外的信息,例如每个失败测试错误点的全局存储状态,或每个测试的执行时间和指令数。

依赖关系

~30–44MB
~691K SLoC