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

问题描述 投票:2回答:1

我想证明我的API静态地防止因无法编译而导致无效使用。

有一些工具可以确保代码在运行时出现混乱(#[should_panic]),但是我找不到任何编译失败的东西。 doc测试似乎最有希望,因为每个片段都是一个单独的编译单元,但恐慌检查似乎就是这样。

unit-testing testing rust integration-testing
1个回答
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) {
}

Compile-test toolkit

Rust项目内部使用的编译测试工具被提取到专用的crate compiletest_rs中。

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

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

也可以看看:


不过,这些测试应该谨慎编写。引用compile_fail功能的公告:

请注意,这些类型的测试可能比其他测试更脆弱,因为添加Rust可能会导致代码在以前不能编译时编译。

© www.soinside.com 2019 - 2024. All rights reserved.