我想证明我的API静态地防止因无法编译而导致无效使用。
有一些工具可以确保代码在运行时出现混乱(#[should_panic]
),但是我找不到任何编译失败的东西。 doc测试似乎最有希望,因为每个片段都是一个单独的编译单元,但恐慌检查似乎就是这样。
目前没有一种方法可以指示常规测试不应该编译。通过相关问题(#521和#1994)的观点,像#[compile_fail]
这样的东西不太可能很快就会出现。
但是,还有另外两种方法可以编写这些测试。
从Rust 1.22开始,您可以通过使用compile_fail
标记代码片段来进行无法编译的doc测试:
/// Foos a bar.
///
/// # Example
///
/// ```compile_fail
/// foo(3); // 3 is not a bar
/// ```
fn foo(bar: Bar) {
}
Rust项目内部使用的编译测试工具被提取到专用的crate compiletest_rs
中。
使用documentation中建议的样板文件,可以在tests/compile-fail
文件夹中编写编译失败测试:
fn main() {
let x: bool = 0;
}
也可以看看:
不过,这些测试应该谨慎编写。引用compile_fail
功能的公告:
请注意,这些类型的测试可能比其他测试更脆弱,因为添加Rust可能会导致代码在以前不能编译时编译。