测试子模块真的减少了Rust中的代码膨胀吗?

时间:2016-10-26 20:39:02

标签: testing rust

Rust Book中的

Section 5.2 Testing

  

[tests]模块允许我们将所有测试组合在一起,并在必要时定义辅助函数,这些函数不会成为我们其余箱子的一部分。如果我们当前正在尝试运行测试,则cfg属性仅编译我们的测试代码。这可以节省编译时间,并且还可以确保我们的测试完全不在正常构建之外。

我认为标记为#[test]的函数不会出现在发布版本中,即使它们出现在模块中,对吧?我希望它只是测试辅助功能,可能会浪费空间。它们可以单独隐藏#[cfg(test)],对吧?

1 个答案:

答案 0 :(得分:6)

是的,您可以使用#[cfg(test)]隐藏单个函数,并且#[test]函数将在非测试版本中被删除(请注意,也可以在发布模式下测试!)。是的,在发布版本中,未使用的函数将被优化掉。但是:

  • 向模块添加单个#[cfg(test)]比在每次测试中添加单个head :: tail更容易(因此,实际上更有可能完成)。
  • 编译时差异仍然适用。在发布版本中,当剥离未使用的函数时,它们在被删除之前已经过分析,类型检查和优化。在编译过程中尽早抛出函数的源代码会更快。
  • 非测试调试也很重要 - 在那里,未使用的功能不会被删除。