如何编写确保编译错误的测试?

时间:2019-03-24 18:38:23

标签: unit-testing testing rust integration-testing

我想证明我的API通过无法编译来静态地防止无效使用。

有一些工具可以确保在运行时发生代码混乱(#[should_panic]),但是我找不到任何编译失败的信息。 doc测试似乎是最有前途的,因为每个代码段都是一个单独的编译单元,但是似乎只有恐慌检查了。

1 个答案:

答案 0 :(得分:4)

当前没有一种方法可以表明常规测试不应该编译。而且从相关问题(#521#1994)来看,#[compile_fail]之类的东西不太可能很快就会出现。

但是,还有其他两种方式编写这些测试。

Doctests

Rust 1.22起,您可以通过使用compile_fail标记代码段来进行可能无法编译的 doc测试

/// Foos a bar.
/// 
/// # Example
///
/// ```compile_fail
/// foo(3); // 3 is not a bar
/// ```
fn foo(bar: Bar) {
}

编译测试工具包

Rust项目内部使用的编译测试工具已提取到专用板条箱compiletest_rs中。

使用documentation中建议的样板,可以在tests/compile-fail文件夹中编写编译失败测试:

fn main() {
   let x: bool = 0;
}

另请参阅:


尽管如此,这些测试应谨慎编写。引用compile_fail功能的声明:

  

请注意,这类测试可能比其他测试更脆弱,因为Rust的添加可能导致代码在以前无法编译的情况下进行编译。

相关问题