【问题标题】:How to test the rust standard library?如何测试 rust 标准库?
【发布时间】:2014-11-22 03:57:35
【问题描述】:

我想对我的 rust 标准库副本进行一些更改,然后在我更改的源文件中运行测试。我不需要测试编译器本身。如果不测试很多我没有改变和不关心的东西,我怎么能做到这一点?

这是我已经尝试过的一些事情。注意 - 我想使用的特定文件是 rust 0.12.0 中的 libstd/io/net/pipes.rs

  1. 我尝试了rustc --test pipes.rs - 导入和选项似乎没有正确设置,结果是大量错误。
  2. the rust test suite documentation 之后,我尝试了make check-stage1-std NO_REBUILD=1,但以“找不到`green` 的箱子”失败。 #rust-internals irc 频道上的一个人告诉我,“make check-stage1 经常中断,因为它不是运行测试的‘官方方式’。”
  3. 该频道上的另一个人建议make check-stage0-std,这似乎检查了 libstd,但并不限制对我更改的文件进行测试,即使我使用了 rust 测试套件文档中指定的 TESTNAME 标志。

【问题讨论】:

    标签: testing standard-library rust-0.11


    【解决方案1】:

    make check-stage1-std NO_REBUILD=1... check-stage2-std ... 应该可以工作,如果您之前已经完成了完整的构建。他们只是直接构建测试运行器,而无需执行其余的引导程序。

    在任何情况下,完整的 std 测试运行器总是会构建,因为正如您所注意到的,导入等是为完整的 crate 设置的。 TESTNAME 是限制运行哪些测试的正确方法,但无法限制构建的测试。

    另一种选择是将测试/相关代码提取到外部文件中,另一种方法是通过在libstd/lib.rs 上手动运行rustc 来构建测试运行器:rustc --test lib.rs。可以编辑板条箱的其余部分以删除您不感兴趣的测试/代码。

    【讨论】:

    • 这里有很多建议;我将尝试解析它们。 1. “make check-stage1-std NO_REBUILD=1 . . . . . . . . . . . . . . 应该 工作, if you have done a full build before.”什么是“完整”构建?正如我在#2 中所指出的,我已经运行了“make all”,但这对我不起作用。
    • 2. “make check-stage2-std NO_REBUILD=1 应该可以工作,如果你之前已经完成了完整的构建”。这个似乎确实“有效”,但它的测试方式比我想要测试的要多; TESTNAME 似乎没有任何效果。
    • 3. “没有办法限制测试的构建。”标准库开发人员每次进行更改时都会检查整个测试套件吗?也许还有另一种方法可以在这里得到我想要的。我可以说服编译器设置导入以使用已构建的文件,而不是“限制”构建哪些测试? libstd 开发者如何做到这一点?
    • 4. “另一种选择是将测试/相关代码拉入外部文件”。我非常担心这可能会导致虚假错误。此外,我更喜欢做一些“标准”的事情,这样我看到的任何异常错误都可以追踪,而不会质疑我在构建自己的 Bowlerized stdlib 以测试一个部分时是否犯了复制粘贴错误。
    • make all(或者通常只是make)是我所说的完整构建的意思,所以听起来有暂存问题。 ...-stage2-... 版本更可靠。 TESTNAME 的使用类似于 make check-stage2-std NO_REBUILD=1 TESTNAME=pipes ,它将仅运行在其(模块)路径中具有 pipes 的那些测试。标准库开发人员通常会使用它或在树外进行迭代,并且仅在 libstd 大部分准备就绪时才将其放入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2014-07-28
    相关资源
    最近更新 更多