Я пытаюсь увидеть, как написать модульные тесты для исполняемого файла ржавчины, которые находятся не в модуле того же файла, а в каталоге tests/
рядом с src/
, сгенерированным Cargo.В настоящее время это мой каталог установки
hello_cargo
|
src
|
main.rs
value.rs
tests
|
tests.rs
Содержимое value.rs:
#[derive(Debug)]
pub enum Value {
Int(i32),
Bool(bool)
}
Содержимое main.rs
mod value;
use value::Value;
fn main() {
let x:Value = Value::Int(7);
let y = Value::Bool(true);
match x {
Value::Int(ival) => println!("{}", ival),
Value::Bool(bval) => println!("{}", bval)
}
match y {
Value::Int(ival) => println!("{}", ival),
Value::Bool(bval) => println!("{}", bval)
}
}
Содержимое tests.rs
#[cfg(test)]
mod tests {
use super::hello_cargo;
#[test]
fn it_works() {
let y = value::Value::Bool(true);
match y {
value::Value::Bool(val) => assert!(val),
_ => ()
}
}
}
Когда я запускаю cargo test
, я всегда получаю, с несколькими различными use::
комбинациями
error[E0432]: unresolved import `super::hello_cargo`
--> tests/tests.rs:5:6
|
5 | use super::hello_cargo;
| ^^^^^^^^^^^^^^^^^^ no `hello_cargo` in the root
Разве невозможно сделать это с исполняемыми файлами?Вам нужна библиотека, чтобы иметь тесты во внешнем каталоге тестов?
Будет ли это решено путем упаковки всего кода в каждом файле в mod
?