В настоящее время нет способа указать, что обычный тест не должен компилироваться. И, судя по сопутствующим вопросам ( # 521 и # 1994 ), что-то вроде #[compile_fail]
вряд ли станет доступно в ближайшее время.
Однако есть два других способа написания этих тестов.
Doctests
Начиная с Rust 1.22 , вы можете выполнить doc тесты , которые, как предполагается, не скомпилируются, пометив фрагмент кода с помощью compile_fail
:
/// Foos a bar.
///
/// # Example
///
/// ```compile_fail
/// foo(3); // 3 is not a bar
/// ```
fn foo(bar: Bar) {
}
Инструментарий для компиляции
Инструменты для тестирования компиляции, используемые внутри проекта Rust, были извлечены в специальный ящик compiletest_rs
.
С шаблоном, предложенным в документации , можно написать тесты на сбой компиляции в папке tests/compile-fail
:
fn main() {
let x: bool = 0;
}
Смотри также:
Тем не менее, эти тесты должны быть написаны с осторожностью. Цитата из анонса compile_fail
:
Обратите внимание, что такие тесты могут быть более хрупкими, чем другие, так как добавления в Rust могут привести к компиляции кода, если раньше этого не происходило.