3
我正在为要导出的宏编写测试。只要我将测试保存在单个文件中,测试就能正常工作,但只要我将测试模块放入单独的文件中,就会出现错误。将测试模块移动到单独的文件时未定义的宏
出口/ src目录/ lib.rs
pub mod my_mod {
#[macro_export]
macro_rules! my_macro {
($x:expr) => { $x + 1 };
}
pub fn my_func(x: isize) -> isize {
my_macro!(x)
}
}
出口/测试/ lib.rs
#[macro_use]
extern crate export;
mod my_test_mod {
use export::my_mod;
#[test]
fn test_func() {
assert_eq!(my_mod::my_func(1), 2);
}
#[test]
fn test_macro() {
assert_eq!(my_macro!(1), 2);
}
}
运行cargo test
表明,这两个测试通过。如果我将my_test_mod
提取到不再编译的文件。
出口/ src目录/ lib.rs
不变
出口/测试/ lib.rs
#[macro_use]
extern crate export;
mod my_test_mod;
出口/测试/ my_test_mod.rs
use export::my_mod;
#[test]
fn test_func() {
assert_eq!(my_mod::my_func(1), 2);
}
#[test]
fn test_macro() {
assert_eq!(my_macro!(1), 2); // error: macro undefined: 'my_macro!'
}
这给我一个错误,宏未定义。
@LukasKalbertodt这个看起来有'macro_export',并且在它被使用之前导入宏;介意将点与我的副本连接起来? – Shepmaster
@Shepmaster Nevermind,我的错误。累了 ;-) –