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

Jef*_*ges 2 testing rust

第5.2节 Rust书中的测试

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

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

小智 6

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

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

  • 我认为“#[test]”确实暗示了“cfg(test)”。但这仍然不涉及辅助方法或全局导入。 (2认同)