在 Raku 中,Test 模块提供了一个测试框架,也被 Raku 的官方 spectest 套件使用。

    测试函数发出符合 的输出。通常,它们用于 sink 上下文中:

    但是不论测试成功与否,所有函数都会返回布尔值,如果测试失败,可以使用它来打印消息:

    1. or diag "\nTo use hyphen in name, pass :relaxed-name to meta-ok\n";

    与任何 Perl 项目一样,测试位于项目基本目录的 t 目录下。

    典型的测试文件看起来像这样:

    我们确保通过 use v6.c 编译指令使用 Raku,然后加载 Test 模块并指定库的位置。然后我们指定我们*计划*运行多少个测试(这样测试框架可以告诉我们运行的测试是否比我们预期的要多),并且在完成测试后,我们使用*完成测试*来告诉框架我们已经完成。

    线程安全

    请注意, 模块中的例程*不是*线程安全的。这意味着您不应该同时尝试在多个线程中使用测试例程,因为 TAP 输出可能会出现乱序并且会使解释它的程序迷惑。

    目前没有计划使其线程安全。如果线程测试对您至关重要,您可能会发现一些合适的,代替 Test 来满足您的测试需求。

    运行测试

    1. $ raku t/test-filename.t

    或者通过 Perl 5 中的 命令,其中 --exec 用于指定运行测试的可执行文件:

    要在第一次失败时中止测试套件,请设置 PERL6_TEST_DIE_ON_FAIL 环境变量:

    可以在测试文件中使用相同的变量。在加载 Test 模块之前设置它:

    测试计划

    测试计划用 声明将要完成的计划数量,或者可能会跳过的计划数量。如果没有声明计划,done-testing 则用于声明测试结束。

    Test 模块导出各种函数,用于检查给定表达式的返回值并生成标准化测试输出。

    在实践中,表达式通常是对要进行单元测试的函数或方法的调用。ok 和 将匹配 TrueFalse。但是,在可能的情况下,最好使用下面的一个专门的比较测试函数,因为它们可以在比较失败时打印更有用的诊断输出。

    通过字符串比较

    nok 使用适当的运算符测试相等性,具体取决于它所处理的对象(或类)。

    通过近似数字比较

    is-approx 比较具有一定精度的数字,可以是绝对的或相对的。它对于精度取决于内部表示的数值非常有用。

    通过结构比较

    任意比较

    您可以使用 进行任何类型的比较,它将您想要用于比较的函数或运算符作为参数。

    通过对象类型比较

    测试对象是否属于某种类型。

    通过方法名比较

    用于对象以检查它们是否具有该特定方法。

    通过角色比较

    • does-ok($variable, $role, $description?)

    检查给定变量是否可以执行某个角色

    通过正则表达式比较

    like 和 使用正则表达式检查; 在第一种情况下,如果存在匹配则通过,在第二种情况下则不通过。

    测试模块

    用 实验性地加载模块,如果加载失败则会失败。

    测试异常

    lives-ok 是相反的测试代码的方法; 第一个检查是它抛出异常,第二个检查它不抛出异常; 检查代码是否抛出了作为参数传递的特定异常; fails-like 同样,检查代码是否返回特定类型的 。eval-dies-ok 和 在测试之前计算的字符串上工作类似。

    只有在所有子测试都是 的时候, 这组子测试的结果才是 ok 的; 他们按使用 分组。

    跳过测试

    手动控制

    如果上面记录的便利功能不符合您的需要,您可以使用以下函数手动指导测试套输出; pass 将打印测试已经通过, 将打印(可能)信息性消息。