edxml / test-corpus
EDXML 实现的可移植单元测试集合
Requires
- php: >=7.4 | >=8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpunit/phpunit: ^9.0
This package is not auto-updated.
Last update: 2024-09-27 14:41:49 UTC
README
EDXML 测试语料库
EDXML 测试语料库是针对 EDXML 实现的可移植单元测试集合。每个单元测试包含一个或多个 EDXML 文件。实现可以通过解析这些文件来进行测试。该集合的焦点是测试实现是否能够正确检测无效输入,以及更一般地,是否能够使实现偏离其幸福路径。
该集合并不完整,因为它不提供任何关于通过测试的实现的正确性或质量的保证。实现必须始终与 EDXML 规范 进行验证。
该集合也不能替代直接调用实现内部 API 的单元测试。测试语料库是补充性的,特别是在测试处理无效 EDXML 数据方面,这通常使用内部 API 很难产生。
文件存储在 tests/
目录中。对于每个 EDXML 版本,都有一个包含针对该特定 EDXML 规范版本有效测试文件的子目录。例如,EDXML 版本 3.0.0 的测试文件位于 tests/3/3.0/3.0.0
目录中。由于 EDXML 规范使用语义版本控制,与次要或补丁版本更新相关的目录仅包含针对该特定更新中引入的特定更改的附加测试。每个主要版本都包含一组全新的测试文件。
如何使用
可以通过克隆此存储库在您的项目中使用测试语料库。对于 PHP 和 Python 项目,您还可以使用包管理器将测试语料库作为依赖项添加。此存储库包括一个 Python 包 和一个 Composer 包 用于 PHP。
根据测试类型,以各种方式检查文件或文件集是否正确解析。
- 有效数据,实现必须无问题地摄取(在
valid/
中) - 无效数据,实现必须拒绝摄取(在
invalid/
中) - 冲突/非冲突数据,实现必须检测(在
conflict/
中)
下面将详细解释这三种类型的测试。
测试有效数据
这些测试可以用来验证实现是否能够成功解析提供的有效 EDXML 数据。成功可以通过两种方式确定。
- 解析不得产生实现产生的任何错误。
- 当测试包含一个名为
expected.edxml
的文件时,可以验证解析输入数据的内部表示的正确性。
通过让实现将此表示序列化为 EDXML 并将其与 expected.edxml
进行比较来测试输入 EDXML 数据的内部表示的正确性。当两个 EDXML 数据集等效时,测试成功。给定两个 EDXML 数据集 A 和 B,等效意味着
- A 中的每个事件都必须在 B 中有等效的事件,反之亦然。EDXML 事件的等效性定义在 EDXML 规范 中。
- A中的所有
<ontology>
元素组合必须等同于B中所有<ontology>
元素组合,反之亦然。EDXML本体论中“等价”的含义定义在EDXML规范中。
每个测试都包含在其自己的子目录中。需要摄取的文件命名为input-xxx.edxml
,其中xxx
代表序列号。文件应按照这些序列号指示的顺序摄取。根据实现方式,这可能或可能不会产生影响。
测试无效数据
这些测试可用于验证实现能否成功检测EDXML输入数据中的各种错误。这个子集中每个EDXML文件都必须被实现拒绝,因为它们是无效的。
EDXML数据可能有各种无效方面,如本体定义或事件的架构。实现可能为这些情况中的每一个产生特定类型的异常。文件根据这些方面分组,以便测试实现产生的特定类型的异常。
测试冲突处理
EDXML事件可以是版本化的,版本化的事件可能导致冲突。这些测试包括冲突事件(位于conflicting
子目录中)以及非冲突事件(位于non-conflicting
子目录中)。EDXML实现必须正确识别这两者。